Google的自己的刷新方法SwipeRefreshLayout
来源:互联网 发布:ots软件什么意思 编辑:程序博客网 时间:2024/06/07 03:54
SwipeRefreshLayout是Google的亲儿子,也就是原生的刷新,但是它只支持下拉刷新不支持上啦加载更多,今天小弟不才自己添加了一个上啦加载的方法希望给用到的人给予参考鉴赏,话不多说直接开启……
一、首先先来说下SwipeRefreshLayout的一个常用方法:
①、isRefreshing() 判断当前的状态是否是刷新状态。
②、setColorSchemeResources(int... colorResIds)设置下拉进度条的颜色主题。
③、setOnRefreshListener(SwipeRefreshLayout.OnRefreshListener listener)设置监听,需要重写onRefresh()方法,顶部下拉时会调用这个方法,在里面实现你要实现的业务逻辑即可。
④、setProgressBackgroundColorSchemeResource(int colorRes)设置下拉进度条的背景颜色。
⑤、setRefreshing(boolean refreshing)设置刷新状态,true表示正在刷新,false表示取消刷新。 自动刷新
二、说完常用方法了,说下SwipeRefreshLayout的基本使用,其实SwipeRefreshLayout的使用非常简单,PS:
<android.support.v4.widget.SwipeRefreshLayout android:id="@+id/swipeRefresh" android:layout_width="match_parent" android:layout_height="wrap_content"> <ListView android:id="@+id/new_listView" android:layout_width="match_parent" android:layout_height="wrap_content" android:divider="@color/gray" android:dividerHeight="1px"/></android.support.v4.widget.SwipeRefreshLayout>官方文档已经说明SwipeRefreshLayout只能有一个孩子,所以使用的时候一定注意方式。
swipeRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { //这里是主线程一些比较耗时的操作比如联网获取数据,需要放到子线程中去执行
//这里也可以直接请求}});
这样就可以简单的实现下拉刷新了
三、我们来说下上啦加载更多的功能:
这里我们就得自定义上拉加载更多的布局了,定义一个view集成SwipeRefreshLayout从而实现上拉加载
我们在定义的RefreshListView中onLayout中先获取listview的控件
@Overrideprotected void onLayout(boolean changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); // 初始化ListView对象 if (mListView == null) { getListView(); }}
然后再获取listview的对象并且设置滚动监听
/** * 获取ListView对象 */private void getListView() { int childs = getChildCount(); if (childs > 0) { View childView = getChildAt(0); if (childView instanceof ListView) { mListView = (ListView) childView; // 设置滚动监听器给ListView, 使得滚动的情况下也可以自动加载 mListView.setOnScrollListener(this); Log.d(VIEW_LOG_TAG, "### 找到listview"); } }}
接着再处理下事件分发
@Overridepublic boolean dispatchTouchEvent(MotionEvent event) { final int action = event.getAction(); switch (action) { case MotionEvent.ACTION_DOWN: // 按下 mYDown = (int) event.getRawY(); break; case MotionEvent.ACTION_MOVE: // 移动 mLastY = (int) event.getRawY(); break; case MotionEvent.ACTION_UP: // 抬起 if (canLoad()) { loadData(); } break; default: break; } return super.dispatchTouchEvent(event);}
最后就是进行判断从而实现它的加载数据了
/** * 是否可以加载更多, 条件是到了最底部, listview不在加载中, 且为上拉操作. * * @return */private boolean canLoad() { return isBottom() && !isLoading && isPullUp();}/** * 判断是否到了最底部 */private boolean isBottom() { if (mListView != null && mListView.getAdapter() != null) { return mListView.getLastVisiblePosition() == (mListView.getAdapter().getCount() - 1); } return false;}/** * 是否是上拉操作 * * @return */private boolean isPullUp() { return (mYDown - mLastY) >= mTouchSlop;}/** * 如果到了最底部,而且是上拉操作.那么执行onLoad方法 */private void loadData() { if (mOnLoadListener != null) { // 设置状态 setLoading(true); // mOnLoadListener.onLoad(); }}/** * @param loading */public void setLoading(boolean loading) { isLoading = loading; if (isLoading) { mListView.addFooterView(mListViewFooter); } else { mListView.removeFooterView(mListViewFooter); mYDown = 0; mLastY = 0; }}
!收尾,这里就是在布局中如何使用
<com.handmark.pulltorefresh.library.RefreshListView android:id="@+id/pt_listView" android:layout_width="match_parent" android:layout_height="match_parent" > <ListView android:id="@+id/new_listView" android:layout_width="match_parent" android:layout_height="wrap_content" android:divider="@color/gray" android:dividerHeight="1px"/></com.handmark.pulltorefresh.library.RefreshListView>
<!--自定义View实现SwipeRefreshLayout,添加上拉加载更多的功能--> <com.pinger.swiperefreshdemo.view.SwipeRefreshView android:id="@+id/srl" android:layout_width="match_parent" android:layout_height="match_parent"> <ListView android:id="@+id/lv" android:layout_width="match_parent" android:layout_height="match_parent"/> </com.pinger.swiperefreshdemo.view.SwipeRefreshView>作者:PingerOne链接:http://www.jianshu.com/p/d23b42b6360b來源:简书著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
在代码中使用
// 设置下拉刷新监听器refresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { refresh.post(new Runnable() { @Override public void run() { // 更新完后调用该方法结束刷新 refresh.setRefreshing(false); } }); }});refresh.setOnLoadListener(this);
这是上拉加载更多
@Override public void onLoad() { refresh.postDelayed(new Runnable() { @Override public void run() { isLoad = true; if (number<6) { number++; for (int i = 0; i < 6; i++) { DepositAccount depositAccount = new DepositAccount(); depositAccount.setName("上拉加载704195"+number); depositAccount.setCount(2009.66); depositAccount.setTime("2017-4-20 09:00"); depositAccount.setEndTime("2017-05-20"); listDepositAccount.add(depositAccount); } }else{ textFooterView.setText("数据已加载完毕");// listivew.removeFooterView(textFooterView); } depositAdapter.notifyDataSetChanged(); // 加载完后调用该方法 refresh.setLoading(false); } }, 1500);
总的来说这么多了,上班期间写的不好还望大家海涵,总体思路也就是这样了这里只供参考希望能给用到的人一些帮助。
- Google的自己的刷新方法SwipeRefreshLayout
- Google自己的下拉刷新组件SwipeRefreshLayout
- Google自己的下拉刷新组件SwipeRefreshLayout
- Google自己的下拉刷新组件SwipeRefreshLayout
- Google自己的下拉刷新组件SwipeRefreshLayout
- Google自己的下拉刷新组件SwipeRefreshLayout
- Google自己的下拉刷新组件SwipeRefreshLayout
- Google自己的下拉刷新组件SwipeRefreshLayout
- Android-Google自己的下拉刷新组件SwipeRefreshLayout
- Google自己的下拉刷新组件 SwipeRefreshLayout + RecyclerView 实现 上拉刷新 和 下拉刷新
- google推出的SwipeRefreshLayout下拉刷新用法
- google推出的SwipeRefreshLayout下拉刷新用法
- google推出的SwipeRefreshLayout下拉刷新用法
- google推出的SwipeRefreshLayout下拉刷新用法
- google推出的SwipeRefreshLayout下拉刷新用法
- google推出的SwipeRefreshLayout下拉刷新用法
- google官方的下拉刷新控件SwipeRefreshLayout
- Google下拉刷新组件SwipeRefreshLayout的使用
- java去除字符串中多余空格,只留一个
- 多线程
- Java开发环境搭建
- LeetCode-697:Degree of an Array (度相同的最小子数组)
- android Location_mode 默认设置不成功
- Google的自己的刷新方法SwipeRefreshLayout
- Elasticsearch中文分词插件IK Analyer安装操作指导(本博第二篇)
- lambda表达式
- ARToolKit的Marker(barcode码)的ID识别
- 计算机的两大设计思想
- [DP]BZOJ 4321: queue2
- Safari移动端 数字被识别成电话号码
- Gitflow工作流程
- 位运算