android:ListView下拉刷新上拉加载(SwipeRefreshLayout+滑动监听加载更多)
2016-05-20 22:39
567 查看
这次使用的是系统的SwipeRefreshLayout实现下拉刷新,和设置ListView的滑动监听判断是否滑动到最底部然后加载更多;
这个要比PullToRefreshListView简单很多,想PullToRefreshListView实现下拉刷新上拉加载的可以看这篇博客:
/article/7682941.html
至于使用哪一种大家可以根据产品的需求选择,这两种刷新目前为止世面上还是使用PullToRefreshListView的比较多;
首先说下SwipeRefreshLayout的五个方法:
1、setOnRefreshListener():设置手势滑动监听器。
2、setProgressBackgroundColor():设置进度圈的背景色。
3、setColorSchemeResources():设置进度动画的颜色。
4、setRefreshing():设置组件的刷洗状态。
5、setSize():设置进度圈的大小
这个大家简单了解一下,下面代码中都一一用到;
首先说下布局文件,如果想用SwipeRefreshLayout实现下拉刷新必须把ListView写到SwipeRefreshLayout布局里面;
<?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/srfl"> <ListView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/listview" /> </android.support.v4.widget.SwipeRefreshLayout>
我这边是自己写的小Demo所以下拉的时候直接发送一个延时1秒的handler,然后添加数据刷新adapter;
上拉加载更多的时候直接给ListVIew设置了一个滑动监听,判断是否滑动到adapter的最下面,然后加载数据,刷新adapter;
public class MainActivity extends Activity { private ListView mListView; private SwipeRefreshLayout swipeRefreshLayout; private List<String> stringList=new ArrayList<>(); private ArrayAdapter<String> adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); for (int x=0 ; x<16;x++){ stringList.add("新浪微博:搏击爱好者Z"+"---"+x); } initView(); } private void initView() { swipeRefreshLayout= (SwipeRefreshLayout) findViewById(R.id.srfl); //设置进度圈的大小;(这里面只有两个值SwipeRefreshLayout.LARGE和DEFAULT,后者是默认效果) swipeRefreshLayout.setSize(SwipeRefreshLayout.LARGE); //设置进度圈的背景色。这里随便给他设置了一个颜色:浅绿色 swipeRefreshLayout.setProgressBackgroundColorSchemeColor(Color.CYAN); //设置进度动画的颜色。这里面最多可以指定四个颜色,我这也是随机设置的,大家知道怎么用就可以了 swipeRefreshLayout.setColorSchemeResources(android.R.color.holo_orange_dark ,android.R.color.holo_blue_dark ,android.R.color.holo_red_dark ,android.R.color.widget_edittext_dark); mListView= (ListView) findViewById(R.id.listview); adapter = new ArrayAdapter<>(MainActivity.this, android.R.layout.simple_list_item_1, stringList); mListView.setAdapter(adapter); //设置手势滑动监听器 swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { public void onRefresh() { //发送一个延时1秒的handler信息 handler.sendEmptyMessageDelayed(199,1000); } }); //给listview设置一个滑动的监听 mListView.setOnScrollListener(new AbsListView.OnScrollListener() { //当滑动状态发生改变的时候执行 public void onScrollStateChanged(AbsListView view, int scrollState) { switch (scrollState){ //当不滚动的时候 case AbsListView.OnScrollListener.SCROLL_STATE_IDLE: //判断是否是最底部 if(view.getLastVisiblePosition()==(view.getCount())-1){ for(int x=0;x<5;x++){ stringList.add(stringList.size(),"魔兽世界"+x); } adapter.notifyDataSetChanged(); } break; } } //正在滑动的时候执行 public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { } }); } private Handler handler=new Handler(){ @Override public void handleMessage(Message msg) { if(msg.what==199){ stringList.add(0,"英雄联盟"); adapter.notifyDataSetChanged(); //设置组件的刷洗状态;false代表关闭 swipeRefreshLayout.setRefreshing(false); } } }; }
这里面为了给大家演示SwipeRefreshLayout的几个方法,如果全部使用默认可以把setProgressBackgroundColor():setColorSchemeResources():setSize():这三个方法去掉。
这样代码会更少,默认效果也非常不错,这个看大家需求。
源码下载地址
相关文章推荐
- Android ADT——快速更新API
- Android 开发中的微技巧和小知识
- Android RxJava+Retrofit 一次(合并)请求多个接口
- 利用注解初始化View对象
- android setClickable 不起作用 没有作用
- Android开发-数据存储SharedPreferences工具类、Set<String>保存问题、源码分析
- 饿了么开源项目Hermes:新颖巧妙易用的Android进程间通信IPC框架
- Android消息机制详细解析
- Android之Bundle类
- Android(安卓)与PC通过USB线进行短信同步
- Android(安卓)与PC通过USB线进行短信同步
- 饿了么开源项目Hermes:新颖巧妙易用的Android进程间通信IPC框架
- android 类型
- 谈谈Android系统启动时的那点事儿
- Android之解决Android Studio 出现ADB not responding.... kill "adb.exe" and click 'Restart'
- Android消息处理机制(Handler 与Message)---01
- Android中的小组件(widget)的写法
- Android录音播放、停止
- Android学习记录(十六) recyclerview 滑动慢的问题。
- Android一键锁屏组件小应用