注意:此Demo用的是第三方的Xlistview.jar,需要复制me文件夹到项目中,两个XML布局文件和一张图片

把下面的复制到String中

<string name="xlistview_header_hint_normal">下拉刷新</string>
    <string name="xlistview_header_hint_ready">松开刷新数据</string>
    <string name="xlistview_header_hint_loading">正在加载...</string>
    <string name="xlistview_header_last_time">上次更新时间:</string>
    <string name="xlistview_footer_hint_normal">查看更多</string>
    <string name="xlistview_footer_hint_ready">松开载入更多</string>

还要注意:用到了网络,所以需要加网络权限

//----------------主布局文件----------------------------------------

<me.XListView android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/lv"></me.XListView>

//----======================--------------主Activity-----====================-------------------

package com.bwie.test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import me.XListView;
import me.XListView.IXListViewListener;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import com.bwie.test.JingDian.ResultBean;
import com.bwie.test.JingDian.ResultBean.RowsBean;
import com.bwie.test.JingDian.ResultBean.RowsBean.InfoBean;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;

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.ListView;
import android.widget.TextView;

public class MainActivity extends Activity implements IXListViewListener{
    private String urlPath="http://api.fang.anjuke.com/m/android/1.3/shouye/recInfosV3/?city_id=14&lat=40.04652&lng=116.306033&api_key=androidkey&sig=9317e9634b5fbc16078ab07abb6661c5&macid=45cd2478331b184ff0e15f29aaa89e3e&app=a-ajk&_pid=11738&o=PE-TL10-user+4.4.2+HuaweiPE-TL10+CHNC00B260+ota-rel-keys%2Crelease-keys&from=mobile&m=Android-PE-TL10&cv=9.5.1&cid=14&i=864601026706713&v=4.4.2&qtime=20160411091603&pm=b61&uuid=1848c59c-185d-48d9-b0e9-782016041109&_chat_id=";
    private List<RowsBean> rowsBeans=new ArrayList<JingDian.ResultBean.RowsBean>();
    
    private XListView lv;
    private TextView tv_jia;
    private MyAdapter adapter;
    
    //定义一个页数
    private int ye=0;
    private int STATE_1 = 1;
    private int STATE_2 = 2;
    private int STATE_3;
    //定义一个集合用于刷新数据
    private List<RowsBean> list;
    
    private Handler handler=new Handler(){
        public void handleMessage(Message msg) {
            switch (msg.what) {
            case 0:
                //获得数据
                String text=(String) msg.obj;
                tojson(text);
                break;
              
            default:
                break;
            }
        }

        
    };
    
    
    //解析数据
    private void tojson(String text) {
          //判断,如果有数据先清空----如果让他显示上一页的数据就不用清空集合
        if (STATE_3 == STATE_1) {
            list .clear();
        }
        Gson gson=new Gson();
        //类名
        JingDian jingDian=gson.fromJson(text, JingDian.class);
        
        ResultBean resultBean=jingDian.getResult();
        //添加
        rowsBeans=resultBean.getRows();
        //全部添加到集合
        list.addAll(rowsBeans);
        
        //更新适配器
        if (adapter == null) {
               adapter = new MyAdapter(list,this);
               lv.setAdapter(adapter);
           } else {
               adapter .notifyDataSetChanged();
           }
        //加载数据
           load();
        
        
                   
        
    };

    private void load() {
         //停止更新
        lv.stopRefresh();
        //加载更多
        lv.stopLoadMore();
        //更新时间
        lv.setRefreshTime("刚刚");
        
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //找到控件
        lv = (XListView) findViewById(R.id.lv);
        tv_jia = (TextView) findViewById(R.id.tv_jia);
        //创建集合
        list = new ArrayList<JingDian.ResultBean.RowsBean>();
       
        lv.setPullLoadEnable(true);
         //获得数据
            huodeshuju(ye);

//设置xListview的监听
        lv.setXListViewListener(this);
    }

  //---------------------------------  

    //获得数据
    private void huodeshuju(final int ye) {
        //使用线程

        new Thread(){
                    public void run() {
                        try {
                            //先创建出了一个URL对象,urlPath:是我们访问接口地址
                            URL url=new URL("http://api.fang.anjuke.com/m/android/1.3/shouye/recInfosV3/?city_id=14&lat=40.04652&lng=116.306033&api_key=androidkey&sig=9317e9634b5fbc16078ab07abb6661c5&macid=45cd2478331b184ff0e15f29aaa89e3e&app=a-ajk&_pid=11738&o=PE-TL10-user+4.4.2+HuaweiPE-TL10+CHNC00B260+ota-rel-keys%2Crelease-keys&from=mobile&m=Android-PE-TL10&cv=9.5.1&cid=14&i=864601026706713&v=4.4.2&qtime=20160411091603&pm=b61&uuid=1848c59c-185d-48d9-b0e9-782016041109&_chat_id="+ye);
                            
                             //URL链接对象,通过URL对象打开一个connection链接对像
                            HttpURLConnection urlConnection=(HttpURLConnection) url.openConnection();
                            //设置urlConnection对象链接超时
                            urlConnection.setConnectTimeout(5000);
                            //设置urlConnection对象获取数据超时
                            urlConnection.setReadTimeout(5000);
                            //设置本次urlConnection请求方式
                            urlConnection.setRequestMethod("GET");
                            //调用urlConnection的链接方法,线程等待,等待的是服务器所给我们返回的结果集
                           // urlConnection.connect();
                            //获取本次网络请求的状态码
                            int code=urlConnection.getResponseCode();
                            //如果本次返回的状态吗是200(成功)
                            if (code==200) {
                                 //调用urlConnection.getInputStream得到本次请求所返回的结果流
                                InputStream inputStream=urlConnection.getInputStream();
                                //创建一个BufferedReader,去读取结果流
                                BufferedReader reader=new BufferedReader(new InputStreamReader(inputStream));
                                String readLine;
                                StringBuffer buffer=new StringBuffer();
                                while ((readLine=reader.readLine())!=null) {
                                    buffer.append(readLine);
                                    
                                }
                                //读取完结果流之后所得到的结果
                                String result=buffer.toString();
                               Log.i("数据:----", ye+":"+result);
                                Message message=new Message();
                                message.what=0;
                                message.obj=result;
                                handler.sendMessage(message);
                                inputStream.close();
                            }
                        } catch (MalformedURLException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        } catch (IOException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                        
                    };
                }.start();
        
    }

    

    @Override
    public void onRefresh() {
          STATE_3 = STATE_1;//设置判断
            //获得网络数据        
             //下拉刷新时,将页数在设为1,从第一页开始
             list.clear();
             ye=0;
             huodeshuju(ye);    
             
        
    }

    @Override
    public void onLoadMore() {
        STATE_3 = STATE_2;
        //每一次上拉,让页数加1
        ye++;
        Log.i("页", ye+"");
        //获得网络数据
        huodeshuju(ye);
       
        Log.i("页222", ye+"");
        
    }
    
}

第三方 XListview 上拉加载、下拉刷新、分页加载和Gson解析的更多相关文章

  1. APICloud上啦加载下拉刷新模块

    apicloud有自带的上啦加载下拉刷新,当让也可以用第三方或者在模块库里面找一个使用 一.下拉刷新,一下代码写在 apiready = function (){} 里面 apiready = fun ...

  2. Vue mint ui用在消息页面上拉加载下拉刷新loadmore 标记

    之前总结过一个页面存在多个下拉加载的处理方式,今天再来说一下在消息页面的上拉加载和下拉刷新,基本上每个app都会有消息页面,会遇到这个需求 需求:每次加载十条数据,上拉加载下拉刷新,并且没有点击查看过 ...

  3. 上拉加载下拉刷新控件WaterRefreshLoadMoreView

    上拉加载下拉刷新控件WaterRefreshLoadMoreView 效果: 源码: // // SRSlimeView // @author SR // Modified by JunHan on ...

  4. RecyclerView 上拉加载下拉刷新

    RecyclerView 上拉加载下拉刷新 <android.support.v4.widget.SwipeRefreshLayout android:id="@+id/teach_s ...

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

    微信小程序实现上拉加载下拉刷新 使用小程序默认提供方法. (1). 在xxx.json 中开启下拉刷新,需要设置backgroundColor,或者是backgroundTextStyle ,因为加载 ...

  6. mui scroll和上拉加载/下拉刷新

    mui中 scroll和上拉加载/下拉刷新同时存在会出现两个滚动条 把/*   */ /* //mui页面鼠标拖动代码: mui('.mui-scroll-wrapper').scroll({ dec ...

  7. 仿UC天气下拉和微信下拉眼睛头部淡入淡出--第三方开源--PullLayout

    Android-PullLayout是github上的一个第三方开源项目,该项目主页是:https://github.com/BlueMor/Android-PullLayout 原作者项目意图实现类 ...

  8. 【Arduino学习笔记06】上拉电阻和下拉电阻

    为什么要用上拉电阻和下拉电阻?--避免输入引脚处于"悬空"状态 下图是一个没有使用上拉电阻/下拉电阻的电路图: 在按键没有按下时,要读取的输入引脚没有连接到任何东西,这种状态就称为 ...

  9. 类似UC天气下拉和微信下拉眼睛头部弹入淡出UI交互效果(开源项目)。

    Android-PullLayout是github上的一个第三方开源项目,该项目主页是:https://github.com/BlueMor/Android-PullLayout  原作者项目意图实现 ...

  10. jqgrid 表格中筛选条件的多选下拉,树形下拉 ;文本框清除插件;高级查询多条件动态筛选插件[自主开发]

    /** * @@desc 文本框清除按钮,如果isAutoWrap为false当前文本框父级必须是relative定位,boostrap参考input-group * @@author Bear.Ti ...

随机推荐

  1. FBO

    #include <GL/glew.h> #include <GL/freeglut.h> #include <iostream> #pragma comment( ...

  2. linux之sed命令

    原命令行: sudo sed -i 's/${storm.home}\/logs\/var\/log\/storm/g' /usr/share/storm/log4j/storm.log.proper ...

  3. Storm源码分析--Nimbus-data

    nimbus-datastorm-core/backtype/storm/nimbus.clj (defn nimbus-data [conf inimbus] (let [forced-schedu ...

  4. delphi中ShellExecute使用详解

    http://jingyan.baidu.com/article/ae97a646ae00a2bbfd461d38.html 百度的讲解 http://www.cnblogs.com/del/arch ...

  5. java中的基本数据类型的转换

    本文参考了如下两篇文章: https://my.oschina.net/joymufeng/blog/139952 http://www.cnblogs.com/lwbqqyumidi/p/37001 ...

  6. angularjs表单

    <form ng-app="myApp" ng-controller="validateCtrl" name="myForm" nov ...

  7. SqlServer 汉字转换拼音首字母函数

    CREATE function [dbo].[Func_GetPY](@str nvarchar(4000))returns nvarchar(4000)asbegin set @str=RTRIM( ...

  8. lucene索引的创建与搜索

    package com.cs.multi; import java.io.File;import java.io.IOException; import org.apache.lucene.analy ...

  9. uilabel 复制

    //添加一个长按响应方法 - (void)addLongPressGestureRecognizer { UILongPressGestureRecognizer * longPress = [[UI ...

  10. HTML+CSS Day10实例

    1.家居大视野 效果图: 代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "h ...