首页 > 系统 > Android > 正文

Android XListView下拉刷新和上拉加载更多

2019-12-12 04:38:21
字体:
来源:转载
供稿:网友

市面上有好多的类比ListView刷新数据的开源框架,如:v4包自带的SwipeRefreshLayout ,以及集ListView、GridView甚至WebView于一身的Pulltorefresh等等。前述的两个开源框架目前使用也算频繁。有兴趣的读者可以自行搜索,当然有时间一定回来对所有的使用方式做一个汇总和比较。今天介绍的这款框架,专门针对ListView做下拉刷新与上拉加载的,如果单单是ListView就显得更加简单方便易于理解。
1、首先引入xListView_lib库到自己的Demo上
2、使用步骤
它的使用步骤跟普通的ListView是一样,这也是选择它的原因。使用非常简单方便。
布局如下so easy:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"   xmlns:tools="http://schemas.android.com/tools"   android:layout_width="match_parent"   android:layout_height="match_parent" >    <me.maxwin.view.XListView     android:id="@+id/xlv"     android:layout_width="match_parent"     android:layout_height="match_parent" />  </RelativeLayout> 

按照ListView的方式使用XlistView:

package com.itydl.xlistviewdemo;  import java.util.ArrayList; import java.util.List;  import me.maxwin.view.XListView; import android.os.Bundle; import android.app.Activity; import android.graphics.Color; import android.view.Menu; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView;  public class MainActivity extends Activity {    private XListView mXListView;   List<String> datas = new ArrayList<String>();   private MyAdapter adapter;    @Override   protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.activity_main);     initDatas();     mXListView = (XListView) findViewById(R.id.xlv);     //设置适配器到ListView     adapter = new MyAdapter();     mXListView.setAdapter(adapter);   }      /**模拟网络数据*/   private void initDatas() {     for (int i = 0; i < 50; i++) {       datas.add("我是第" + i + "条数据");     }   }    private class MyAdapter extends BaseAdapter{      @Override     public int getCount() {       if(datas != null){         return datas.size();       }       return 0;     }      @Override     public Object getItem(int position) {       if(datas != null){         return datas.get(position);       }       return null;     }      @Override     public long getItemId(int position) {       return position;     }      @Override     public View getView(int position, View convertView, ViewGroup parent) {       //模拟item为TextView       TextView textView = new TextView(MainActivity.this);       textView.setText(getItem(position)+"");       textView.setTextColor(Color.GREEN);       return textView;     }        } } 

运行结果:


上边只是做了展示,并没有任何加载和刷新的效果。接下来就以完整代码形式,实现加载更多与刷新。

package com.itydl.xlistviewdemo;  import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List;  import me.maxwin.view.XListView; import me.maxwin.view.XListView.IXListViewListener; import android.app.Activity; import android.graphics.Color; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.os.SystemClock; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView;  public class MainActivity extends Activity {    private XListView mXListView;   List<String> datas = new ArrayList<String>();   private MyAdapter adapter;   private boolean isLoadMore;//是否正在加载更多数据的标记      private long preTime;//上一次刷新的当前系统时间毫秒值   private Handler handler = new Handler(){     public void handleMessage(android.os.Message msg) {       if(isLoadMore){         //消息是上拉加载更多         initDatas();         isLoadMore = false;         //刷新完毕,关闭上拉加载效果         mXListView.stopLoadMore();       }else{         //消息是下拉刷新         datas.clear();         initDatas();         //刷新完毕,关闭下拉刷新效果         mXListView.stopRefresh();       }       // 刷新listview       adapter.notifyDataSetChanged();     };   };    @Override   protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.activity_main);     initDatas();     mXListView = (XListView) findViewById(R.id.xlv);     //设置适配器到ListView     adapter = new MyAdapter();     mXListView.setAdapter(adapter);     initListener();   }      private void initListener() {     //设置可以下拉刷新,默认就是true     mXListView.setPullRefreshEnable(true);          //设置可以上拉加载,默认是false     mXListView.setPullLoadEnable(true);          mXListView.setXListViewListener(new IXListViewListener() {              @Override       public void onRefresh() {         // 下拉刷新,实际发送Handler         //发送一个空消息,延迟两秒后告知刷新数据         handler.sendMessageDelayed(Message.obtain(), 2000);         //添加上一次刷新的时间:         if(preTime != 0){           mXListView.setRefreshTime(refreshData(preTime));         }         preTime = System.currentTimeMillis();       }        private String refreshData(long preTime) {         return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(preTime));       }        @Override       public void onLoadMore() {         //标记正在加载更多,发送Handler         isLoadMore = true;         handler.sendMessageDelayed(Message.obtain(), 2000);       }     });   }    /**模拟网络数据*/   private void initDatas() {     //实际开发应该子线程执行     for (int i = 0; i < 50; i++) {       datas.add("我是第" + i + "条数据");     }   }    private class MyAdapter extends BaseAdapter{      @Override     public int getCount() {       if(datas != null){         return datas.size();       }       return 0;     }      @Override     public Object getItem(int position) {       if(datas != null){         return datas.get(position);       }       return null;     }      @Override     public long getItemId(int position) {       return position;     }      @Override     public View getView(int position, View convertView, ViewGroup parent) {       //模拟item为TextView       TextView textView = new TextView(MainActivity.this);       textView.setText(getItem(position)+"");       textView.setTextColor(Color.GREEN);       return textView;     }   } } 

在上边代码中,添加了刷新和加载,并且在下拉刷新的同时,加入了刷新时候系统时间值。
注意的地方:设置可否下拉刷新默认为true,加载更多默认为false。需要加入下面两行代码:

//设置可以下拉刷新,默认就是true mXListView.setPullRefreshEnable(true);  //设置可以上拉加载,默认是false mXListView.setPullLoadEnable(true); 

在刷新完毕,一定记得关闭,即需要下面两行代码:

//刷新完毕,关闭上拉加载效果mXListView.stopLoadMore();//刷新完毕,关闭下拉刷新效果 mXListView.stopRefresh(); 

运行看看效果:

如果想要改变它的样式,也是很简单的。因为它的头布局和为布局是独立开的,知直接去布局文件修改一下显示样式就可以了。

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表