Google下拉刷新组件---SwipeRefreshLayout(一)
来源:互联网 发布:绝对争锋网络剧百度云 编辑:程序博客网 时间:2024/05/17 04:56
前言
Android下拉刷新、上拉加载是一个常见的功能,但是Google推出了一个下拉刷新的官方控件—SwipeRefreshLayout之后,就没有了音信,对于使用者确实是个烦恼。
今天我给大家讲解一下使用SwipeRefreshLayout完成下拉刷新,及简单实现上拉加载功能,如果后续有时间,可能会重写一下这个控件。
使用SwipeRefreshLayout实现下拉刷新
首先在布局中加入SwipeRefreshLayout(布局下只能加一个控件):
<android.support.v4.widget.SwipeRefreshLayout android:id="@+id/srl" android:layout_width="wrap_content" android:layout_height="wrap_content" > <ListView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/listView" android:listSelector="@android:color/transparent" android:scrollbars="none" /> </android.support.v4.widget.SwipeRefreshLayout>
SwipeRefreshLayout里边可以放ListView、GridView、ScrollView、TextView等等控件。
Activity中添加下拉刷新的监听方法:
srl = (SwipeRefreshLayout) findViewById(R.id.srl); srl.setColorSchemeColors(Color.RED, Color.BLUE, Color.YELLOW); srl.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { new Handler().postDelayed(new Runnable() { @Override public void run() { data.add("aaa"); mAdapter.notifyDataSetChanged(); srl.setRefreshing(false); } }, 1000); } });
setColorSchemeColors可以设置等待条的颜色,在onRefresh中实现你的刷新操作,别忘了setRefreshing(false)结束刷新操作。
简单实现上拉加载
简单实现:在lisview最下面一个item呈现在用户面前的时候,自动加载下一页。
首先为listView添加滚动监听list.setOnScrollListener(),主要是修改onScroll方法。这里在上拉操作的时候我们可以分为这几种情况:
(一)数据未填充满整个屏幕
1.数据不够一页,这种情况,listview当让不用上拉加载了,因为第一页数据都没满。
2.数据够一页,但是convertView高度不够填充屏幕,这个时候,我们可以继续加载下一页。
(二)数据填充满了整个屏幕
1.未滚动到最下面一个item,那么正常滚动。
2.已滚动到最下面一个item,那么加载下一页。
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { Log.i("aaa", "firstVisibleItem=" + firstVisibleItem + " visibleItemCount=" + visibleItemCount + " totalItemCount=" + totalItemCount); if(isLoading) { return ; } // 假设一页10条数据 这里不够一页的数据 if (totalItemCount < 10*page) { return; } // 最下面item未出现,正常滚动 if (totalItemCount < visibleItemCount) { return; } // 当最下面一个item出现的时候,加载下一页 if (firstVisibleItem + visibleItemCount >= totalItemCount) { isLoading = true; Toast.makeText(MainActivity.this, "加载更多", Toast.LENGTH_SHORT).show(); new Handler().postDelayed(new Runnable() { @Override public void run() { data.add("bbb"); data.add("ccc"); data.add("ddd"); mAdapter.notifyDataSetChanged(); isLoading = false; } }, 2000); } }
这里需要注意的是,最后一个item出现的时候,是自动加载,此时onScroll还一直在被调用,我在加载下一页的时候,肯定不想重复加载,所以用isLoading变量来记录是否在加载中。
本人技术比较渣,有问题欢迎指正,以后有时间,可能会修改SwipeRefreshLayout源代码。
- Google下拉刷新组件---SwipeRefreshLayout(一)
- SwipeRefreshLayout(Google官方下拉刷新组件)
- 【SwipeRefreshLayout】Google官方下拉刷新组件
- Google官方下拉刷新组件---SwipeRefreshLayout
- Google官方下拉刷新组件---SwipeRefreshLayout
- Google官方下拉刷新组件 SwipeRefreshLayout
- Google官方下拉刷新组件---SwipeRefreshLayout
- Google官方下拉刷新组件---SwipeRefreshLayout
- android swipeRefreshLayout 下拉刷新 google官方组件
- Google自己的下拉刷新组件SwipeRefreshLayout
- Google自己的下拉刷新组件SwipeRefreshLayout
- Google自己的下拉刷新组件SwipeRefreshLayout
- Google自己的下拉刷新组件SwipeRefreshLayout
- Google官方下拉刷新组件SwipeRefreshLayout
- Google原生下拉刷新组件SwipeRefreshLayout
- Google自己的下拉刷新组件SwipeRefreshLayout
- Google官方下拉刷新组件---SwipeRefreshLayout
- Google下拉刷新组件SwipeRefreshLayout的使用
- 字符串中每个字符是否唯一
- phpcms企业会员组登录进入到企业会员商务中心的修改方法!
- Oracle零基础学习1
- 服务器结构探讨(5) -- 最终的结构
- vm三种连接方式bridge, nat, host-only
- Google下拉刷新组件---SwipeRefreshLayout(一)
- Mysql导出excel表格的命令
- Mangos源码分析(6):登录服的设计之功能需求
- 再说“php解决服务器美国时间的问题”
- C++_sizeof函数
- VMware虚拟机安装Linux centOS 6.5使用桥接
- Mangos源码分析(7):服务器公共组件实现之游戏主循环
- Vin2008 X64安装.Net Framework1.1
- Swift UINavigationController(导航控制器)的创建及导航栏的设置