当前位置: 移动技术网 > 移动技术>移动开发>Android > Android通过XListView实现上拉加载下拉刷新功能

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

2019年07月24日  | 移动技术网移动技术  | 我要评论

本文实例为大家分享了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;
  }

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网