下拉刷新,上拉加载
来源:互联网 发布:淘宝美工必备软件 编辑:程序博客网 时间:2024/05/17 09:36
下拉刷新:
下拉刷新是SwipeRefreshLayout自带的,主要要设置setOnRefreshListener的方法
例如:
//设置下拉刷新事件 myRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { Toast.makeText(Activity_swipe.this, "refresh", Toast.LENGTH_SHORT).show(); myRefreshLayout.postDelayed(new Runnable() { @Override public void run() { datas.add(new Date().toGMTString()); adapter.notifyDataSetChanged(); //更新完后调用该方法结束刷新 myRefreshLayout.setRefreshing(false); } }, 1000); } });
这样,下拉的时候就会调用onRefresh的方法,可以在PostDelay中执行耗时操作
下拉加载:
两个要点:
1、监听滑动手势
2、确实手势后改变数据然后提醒更新
以下代码主要实现了手势的监听和初始化了一个ListView:
public class RefreshLayout extends SwipeRefreshLayout implements AbsListView.OnScrollListener { private int mTouchSlop; private ListView mListView; private OnLoadListener mOnLoadListener; private View mListViewFooter;// 按下是的Y坐标 private int mYDown;// 抬起时的Y坐标,与mYDown一起用于滑动到底部时判断是上拉还是下拉 private int mLastY; private boolean isloading = false; public RefreshLayout(Context context, AttributeSet attrs) { super(context, attrs); mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop(); mListViewFooter = LayoutInflater.from(context).inflate(R.layout.listview_footer, null, false); } public RefreshLayout(Context context) { this(context, null); } @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); if(mListView == null) { getListView(); } } private void getListView() { int childs = getChildCount(); if(childs > 0) { View childView = getChildAt(0); if(childView instanceof ListView) { mListView = (ListView)childView;// 设置滚动监听器给Listview,使得滚动的清华下也可以自动加载 mListView.setOnScrollListener(this); } } } @Override public boolean dispatchTouchEvent(MotionEvent ev) { final int action = ev.getAction(); switch (action) { case MotionEvent.ACTION_DOWN: //按下 mYDown = (int) ev.getRawY(); break; case MotionEvent.ACTION_MOVE: //移动 mLastY = (int) ev.getRawY(); break; case MotionEvent.ACTION_UP: //抬起 if(canLoad()) { loadData(); } break; default: break; } return super.dispatchTouchEvent(ev); } 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; } private boolean isPullUp() { return (mYDown - mLastY) >= mTouchSlop; } private void loadData() { if(mOnLoadListener != null) { //设置状态 setLoading(true); // mOnLoadListener.onLoad(); } } public void setLoading(boolean loading) { isloading = loading; if(isloading) { mListView.addFooterView(mListViewFooter); } else { mListView.removeFooterView(mListViewFooter); mYDown = 0; mLastY = 0; } } public void setOnLoadListener(OnLoadListener loadListener) { mOnLoadListener = loadListener; } @Override public void onScrollStateChanged(AbsListView view, int scrollState) { } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { if(canLoad()) { loadData(); } } public static interface OnLoadListener{ public void onLoad(); }}
然后在使用该自定义view的Activity里设置更新数据的事件:
myRefreshLayout.setOnLoadListener(new RefreshLayout.OnLoadListener() { @Override public void onLoad() { Toast.makeText(Activity_swipe.this, "load", Toast.LENGTH_SHORT).show(); myRefreshLayout.postDelayed(new Runnable() { @Override public void run() { datas.add(new Date().toGMTString()); adapter.notifyDataSetChanged(); myRefreshLayout.setLoading(false); } }, 1500); } });
大概这样就能实现下拉刷新,上拉加载了
0 0
- 上拉加载 下拉刷新
- 下拉刷新 * 上拉加载
- 上拉刷新 下拉加载
- 下拉刷新,上拉加载
- 上拉刷新下拉加载
- 下拉刷新,上拉加载
- 上拉刷新,下拉加载
- 上拉刷新下拉加载
- 上拉刷新下拉加载
- 上拉加载,下拉刷新
- 上拉刷新,下拉加载
- 下拉刷新,上拉加载
- 上拉加载,下拉刷新
- 上拉刷新,下拉加载
- 下拉加载上拉刷新
- 下拉刷新-上拉加载
- 上拉刷新,下拉加载
- 上拉加载,下拉刷新
- android studio 安装
- Java代码可视化之路#1
- 出现This is class 。。。,Using post method
- Objective-C中的数组和字符串
- Java程序设计基本知识
- 下拉刷新,上拉加载
- Linux 下的复制cp命令
- 操作系统之进程和线程进程篇
- 在 Eclipse 中使用 NDK
- jQuery小结
- 从遗忘到捡起FFT信号处理
- 前端实践--JavaScript--内置对象
- 江南带你从源码看handler内部实现的机制
- ios中URL中出现字典参数的处理问题