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; }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。