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

作者:辉辉73 时间:2023-02-26 23:30:03 

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

来源:http://blog.csdn.net/u010658122/article/details/52327251

标签:XListView,上拉加载,下拉刷新
0
投稿

猜你喜欢

  • java mybatis框架配置详解

    2023-11-25 08:09:16
  • android实现常驻通知栏遇到的问题及解决办法

    2022-10-12 06:06:58
  • Java日常练习题,每天进步一点点(61)

    2021-07-17 06:56:13
  • Mybatis通过数据库表自动生成实体类和xml映射文件

    2022-01-11 07:05:46
  • Android LuBan与Compressor图片压缩方式

    2022-11-29 01:18:41
  • SpringBoot访问静态资源的配置及顺序说明

    2022-07-18 13:53:31
  • 浅谈Java编程中string的理解与运用

    2021-05-31 22:15:44
  • ADO.NET实用技巧两则

    2021-12-26 12:48:32
  • java程序代码与文本对比实用工具简介

    2023-07-18 22:57:05
  • 图文详解Java中的序列化机制

    2021-06-15 12:11:49
  • Android编程将Activity背景设置为墙纸的简单实现方法

    2022-01-13 14:27:42
  • java字符串抉择

    2023-08-08 14:20:05
  • 基于Spring Boot应用ApplicationEvent案例场景

    2023-08-17 22:38:12
  • Java设计模式之单例和原型

    2023-11-29 04:14:18
  • 构建多模块的Spring Boot项目步骤全纪录

    2022-02-20 04:28:44
  • Android Activity通用悬浮可拖拽View封装的思路详解

    2023-08-08 15:31:48
  • 详解Java分布式系统中一致性哈希算法

    2022-10-11 18:01:05
  • Android仿银行客户签名并且保存签名的截图文件并命名为本地时间

    2023-09-19 22:42:48
  • C# 泛型字典 Dictionary的使用详解

    2022-01-19 23:48:17
  • spring BeanProcessor接口详解

    2021-12-26 07:32:17
  • asp之家 软件编程 m.aspxhome.com