欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android通过XListView实现上拉加载下拉刷新功能

程序员文章站 2022-08-03 18:22:59
本文实例为大家分享了xlistview实现上拉加载下拉刷新的具体代码,供大家参考,具体内容如下 ## 导入xlistview第三方库文件。通过linkedlist...

本文实例为大家分享了xlistview实现上拉加载下拉刷新的具体代码,供大家参考,具体内容如下

## 导入xlistview第三方库文件。通过linkedlist将刷新数据插入到集合头部,将加载的数据放入集合尾部 ##
  private context context;
  private view view;
  private string path;
  private xlistview xlv;
  private linkedlist<data> listdata;

  private handler handler = new handler() {

    @suppresswarnings("unchecked")
    public void handlemessage(android.os.message msg) {

      int code = msg.arg1;
      if(msg.arg1==400){
        toast.maketext(context, "数据格式解析不正确", 0).show();
      }
      else{
        newsfragmentadapter myadapter = null;
        switch (code) {
        case 0:
          // 默认
          listdata = (linkedlist<data>) msg.obj;
          myadapter = new newsfragmentadapter(context, listdata);
          xlv.setadapter(myadapter);
          break;
        case 1:
          linkedlist<data> shualist = (linkedlist<data>) msg.obj;
          myadapter = new newsfragmentadapter(context, shualist);
          for (int i = 0; i < shualist.size(); i++) {
            listdata.addfirst(shualist.get(i));
          }
          myadapter.notifydatasetchanged();
          stoploadorrefresh();
          break;
        case 2:
          linkedlist<data> loadlist = (linkedlist<data>) msg.obj;
          myadapter = new newsfragmentadapter(context, loadlist);
          for (int i = 0; i < loadlist.size(); i++) {
            listdata.addlast(loadlist.get(i));
          }
          myadapter.notifydatasetchanged();
          stoploadorrefresh();
          break;
        default:
          break;
        }
      }
    };
  };

  @override
  public void oncreate(bundle savedinstancestate) {
    super.oncreate(savedinstancestate);
    context=getactivity();
  }

  @override
  public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) {
    view = inflater.inflate(r.layout.fragment, container, false);

    path = getarguments().getstring("path");

    // 配置xlist
    xlv = (xlistview) view.findviewbyid(r.id.xlv); // 获得控件
    xlv.setpullrefreshenable(true);         // 设置可以下拉刷新
    xlv.setpullloadenable(true);          // 设置可以上拉加载
    xlistviewlistener();              // 调用xlistview的监听方法

    if(path != null){
      getmessage(path, 0);            // 调用方法请求数据
    }

    itemclicklistner();               // 调用xlistview条目点击监听方法
    return view;
  }

  private void itemclicklistner() {

    xlv.setonitemclicklistener(new onitemclicklistener() {
      @override
      public void onitemclick(adapterview<?> arg0, view arg1, int arg2, long arg3) {
        intent intent=new intent(context, webviewactivity.class);
        intent.putextra("path", listdata.get(arg2-1).article_url);
        startactivity(intent);
      }
    });
  }

  public void xlistviewlistener() {
    xlv.setxlistviewlistener(new ixlistviewlistener() {

      // 当下拉刷新时实现的操作
      @override
      public void onrefresh() {
        getmessage(path, 1);  // 请求网络,将新请求的内容加载到集合前端
      }

      // 当上拉加载时实现的操作内容
      @override
      public void onloadmore() { // 请求网络,将请求的新内容加载到集合后端
        getmessage(path, 2);
      }
    });

  }

  public void getmessage(string path, final int code) {

    httputils utils = new httputils();

    // 设置刷新间隔时间,如果不设置默认一分钟后才能刷新出新内容
    utils.configcurrenthttpcacheexpiry(0);

    utils.send(httpmethod.get, path, new requestcallback<string>() {

      // 请求网络失败回调的方法
      @override
      public void onfailure(httpexception arg0, string arg1) {
      }

      // 请求网络成功回调的方法
      @override
      public void onsuccess(responseinfo<string> arg0) {
        string info = arg0.result;

        gson gson = new gson();
        linkedlist<data> list = gson.fromjson(info, modelbean.class).data;
        message message = new message();
        if(list != null){
          message.arg1 = code;
          message.obj = list;
        }else{
          message.arg1=400;
        }
        handler.sendmessage(message);
      }
    });
  }

  private void stoploadorrefresh() {
    // 停止加载
    xlv.stoploadmore();
    // 停止刷新
    xlv.stoprefresh();
    // 最近一次刷新时间
    xlv.setrefreshtime(gettime());
  }

  public string gettime() {
    // 格式化时间
    simpledateformat format = new simpledateformat("hh:mm:ss");
    date date = new date();
    string time = format.format(date);
    return time;
  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。