上拉加载、下拉刷新功能实现

package com.example.my_xlistview_text;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.channels.GatheringByteChannel;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import com.example.adapter.MyAdapter;
import com.example.bean.BeanVO;
import com.example.fresh.XListView;
import com.example.fresh.XListView.IXListViewListener;
import com.google.gson.Gson;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Toast;

public class MainActivity extends Activity implements IXListViewListener{
    private XListView xlv;
    private int flag=10;
    private List<String> list,initlist;
    private MyAdapter adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //找控件
        
        xlv = (XListView) findViewById(R.id.xlv);
        //设置上拉下拉
        xlv.setPullRefreshEnable(true);
        xlv.setPullLoadEnable(true);
        xlv.setXListViewListener(this);
        list=new ArrayList<String>();
        initlist=new ArrayList<String>();
        adapter=new MyAdapter(list, this);
        xlv.setAdapter(adapter);
        //请求并解析数据  
        new Thread(){
            public void run() {
                getdata();
            };
        }.start();
        
    }
/**
 * 请求并解析数据    
 */
    public void getdata(){
                //HttpClient请求数据
                HttpClient client=new DefaultHttpClient();
                HttpGet get=new HttpGet("http://op.juhe.cn/onebox/news/words?key=aadc8e1a325cd0b899e91639018d1769");
                try {
                    HttpResponse response = client.execute(get);
                    if (response.getStatusLine().getStatusCode()==200) {
                        //得到数据
                        Log.i("请求数据", "刷新");
                        InputStream is=response.getEntity().getContent();
                        BufferedReader reader=new BufferedReader(new InputStreamReader(is));
                        StringBuffer sb=new StringBuffer();
                        String str;
                        while ((str=reader.readLine())!=null) {
                            sb.append(str);                        
                        }
                        String jsonstr=sb.toString();
                        //Gson解析
                        Gson gson=new Gson();
                        BeanVO bv=gson.fromJson(jsonstr, BeanVO.class);
                        list = bv.getResult();
                        initdata();
                        //发送消息
                        Message msg=handler.obtainMessage(1, initlist);
                        handler.sendMessage(msg);
                        
                    }
                } catch (ClientProtocolException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
    }
 /**
  * 展示的条目数
  */
    public void initdata(){
        initlist.clear();
        if (list.size()>flag) {
            for (int i = 0; i < flag; i++) {
                initlist.add(list.get(i));
            }
        } else {
            initlist.addAll(list);
        }
    }
/**
 * 处理消息
 */
    Handler handler=new Handler(){
        public void handleMessage(android.os.Message msg) {
            if (msg.what==1) {
                //得到传来的数据
                List<String> lists=(List<String>) msg.obj;
                //刷新适配器展示数据
                adapter.setNewData(lists);
            }
        };
    };

/**
  * 下拉刷新   
  */
@Override
public void onRefresh() {
    // TODO Auto-generated method stub
    //请求数据
    flag=10;
    new Thread(){
        public void run() {
            
        getdata();
        
        };
    }.start();
   onLoad();
}
/**
 * 上拉加载
 */
@Override
public void onLoadMore() {
    // TODO Auto-generated method stub
            flag+=10;
            initdata();
            adapter.setNewData(initlist);
            onLoad();
            if (list.size()<flag) {
                Toast.makeText(MainActivity.this, "没有更多数据", 1000).show();
            }
    
}
/**
 * 停止加载
 */
public void onLoad(){
    xlv.stopLoadMore();
    xlv.stopRefresh();
}
}

layout布局效果

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

<com.example.fresh.XListView
        android:id="@+id/xlv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />

</RelativeLayout>

时间: 2024-10-05 09:35:13

上拉加载、下拉刷新功能实现的相关文章

使用dragloader.js插件实现上拉加载/下拉刷新..

在写代码时候有个需求是,在触屏页面,为了加快页面加载速度,案件列表每页展示5条数据: 然后点击更多,展示下一页数据: 但是为了触屏更好的体验,改为往上滑动案件列表,加载下一页数据:就是要实现上拉加载/下拉刷新的效果: 我只用到了 上拉加载: 参考资料:http://blog.csdn.net/xb12369/article/details/39202711 下面是写的demo: html代码: <!DOCTYPE html> <html lang="en"> &

ListView上拉加载下拉刷新

主要用到了这个几个文件,MainActivity是界面的Activity,MyAdapter是ListView的自定义适配,MyListView是自定义带头部LIistView,如果只需要上拉加载就不需要:activity_main.xml是住界面,item.xml是ListView的子布局里面只有一个TextView,listview_footer.xml是listview的加载更多的底部布局,listview_header.xml是listview的头部布局. MainActivity.ja

XML解析及上拉加载下拉刷新

XML解析及上拉加载下拉刷新 1.XML格式 2.GData和XPath遍历 //配置XML库(配置完才能使用) //(1)添加头文件搜索路径 // Header Search Paths-> /usr/include/libxml2 //(2)添加二进制库 // Link library -> lixml2.dylib //(3)源文件添加编译选项 // -fno-objc-arc //(4)添加头文件 // #import "GDataXMLNode.h"*/ XPat

Mint-ui中loadmore(上拉加载下拉刷新)组件在ios中滑动会触发点击事件的解决方法

bug说明: Mint-ui中loadmore(上拉加载下拉刷新)组件 在 使用fastclick的情况下 ,在ios设备中滑动会触发点击事件: 解决方法: 我是按需引入,去项目中找到loadmore下的index.js,全部引入的要找mint下面mint-ui.common.js 路径如下:你的项目名/node_modules\mint-ui\lib\loadmore\index.js 搜索 handleTouchEnd ,记得写event进去 handleTouchEnd: function

微信小程序上拉加载下拉刷新

微信小程序实现上拉加载下拉刷新 使用小程序默认提供方法. (1). 在xxx.json 中开启下拉刷新,需要设置backgroundColor,或者是backgroundTextStyle ,因为加载的动画可能会是白色背景,会看不清. { "usingComponents": { "annicate": "/components/annicate/index" }, "navigationBarTitleText": &quo

移动端上拉加载下拉刷新

<template> <div class="wrapper" ref="wrapper"> <div class="content" > <div class="refresh" :class="{ativeRefresh:refresh}">刷新</div> <div class="ct-row" v-for=&quo

上拉加载下拉刷新控件WaterRefreshLoadMoreView

效果: 源码: // // SRSlimeView // @author SR // Modified by JunHan on 13-9-18. // #import <UIKit/UIKit.h> #define kStartTo 0.7f #define kEndTo 0.15f #define kAnimationInterval (1.0f / 50.0f) NS_INLINE CGFloat distansBetween(CGPoint p1 , CGPoint p2) { ret

【PullToRefresh 系列一】 Android上拉加载下拉刷新控件详解

转载请注明:http://blog.csdn.net/duguang77/article/details/40921601 作者信息: PullToRefresh控件下载地址:https://github.com/chrisbanes/Android-PullToRefresh 作者:https://github.com/chrisbanes 百度网盘下载地址:http://pan.baidu.com/s/1o6umifw (一)导入方法: 1.下载后将extras,library,sample

MJRefresh(上拉加载下拉刷新)

整理自:https://github.com/CoderMJLee/MJRefresh#%E6%94%AF%E6%8C%81%E5%93%AA%E4%BA%9B%E6%8E%A7%E4%BB%B6%E7%9A%84%E5%88%B7%E6%96%B0 1.导入:pod'MJRefresh' 2.结构图 3.默认下拉刷新 self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{ //进入刷新状态后自

xlistview上拉加载 下拉刷新

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent" >