SwipeRefreshLayout添加上拉自动加载
2016-04-16 01:40
253 查看
自带的SwipeRefreshLayout刷新没有上拉自动加载,不是特么的人性化,所以只能我们手动的去添加一下。
Demo用的是recyclerView,根据返回的TYPE去加载不同的布局,当recyclerview滑动到底部的时候去显示加载的那个动画
这个参考了这篇博文的介绍,非常感谢,写的非常好。
http://blog.csdn.net/qibin0506/article/details/49716795
这里并且实现了类似于知乎那种刚进页面就触动动画去加载数据的动画
![](http://img.blog.csdn.net/20160416024314342?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
效果图就不贴了
Data就是模拟数据的两个方法
RecyclerViewUtils
Demo链接
Demo用的是recyclerView,根据返回的TYPE去加载不同的布局,当recyclerview滑动到底部的时候去显示加载的那个动画
这个参考了这篇博文的介绍,非常感谢,写的非常好。
http://blog.csdn.net/qibin0506/article/details/49716795
这里并且实现了类似于知乎那种刚进页面就触动动画去加载数据的动画
效果图就不贴了
public class MainActivity extends AppCompatActivity implements SwipeRefreshLayout.OnRefreshListener, RecyclerViewUtils.LoadingData { private SwipeRefreshLayout swipeRefreshLayout; private RecyclerView recyclerView; private List<String> mDatas; private RecyclerViewAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); } private void init() { mDatas = new ArrayList<>(); swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.srf_layout); recyclerView = (RecyclerView) findViewById(R.id.recyclerview); swipeRefreshLayout.setOnRefreshListener(this); swipeRefreshLayout.post(new Runnable() { @Override public void run() { swipeRefreshLayout.setRefreshing(true); } }); onRefresh();//必须手动调用一次,否则首次是不会去加载数据的 adapter = new RecyclerViewAdapter(this, mDatas); recyclerView.setLayoutManager(new LinearLayoutManager(this)); RecyclerViewUtils.OnScrollListener(this, recyclerView);//这个方法是判断recyclerView是否滑动到了底部,里面有一个自动加载的接口 recyclerView.setAdapter(adapter); } @Override public void onRefresh() { new Handler().postDelayed(new Runnable() { @Override public void run() { adapter.removeAll(); Data.initData(mDatas); adapter.notifyItemRemoved(adapter.getItemCount()); swipeRefreshLayout.setRefreshing(false); } }, 1500); } @Override public void onLoadMore() {//添加的自动加载 // Toast.makeText(this, "底部", Toast.LENGTH_LONG).show(); new Handler().postDelayed(new Runnable() { @Override public void run() { Data.getData(mDatas); adapter.notifyDataSetChanged(); } }, 1000); } }
Data就是模拟数据的两个方法
public class Data { public static void initData(List<String> mDatas) { for (int i = 'A'; i < 'Z'; i++) { mDatas.add("" + (char) i); } } public static void getData(List<String> mDatas) { for (int i = 0; i < 10; i++) { mDatas.add("" + i); } } }
RecyclerViewUtils
public class RecyclerViewUtils { static LoadingData data; public static void OnScrollListener(final Activity activity, RecyclerView recyclerView) { data = (LoadingData) activity; recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { boolean isSlidingToLast = false; @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { LinearLayoutManager manager = (LinearLayoutManager) recyclerView.getLayoutManager(); if (newState == RecyclerView.SCROLL_STATE_IDLE) { int lastVisibleItem = manager.findLastCompletelyVisibleItemPosition(); int totalItemCount = manager.getItemCount(); if (lastVisibleItem == (totalItemCount - 1) && !isSlidingToLast) { data.onLoadMore();//当滑动到底部的时候触动这个方法 } } } @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); if (dx > 0) { isSlidingToLast = true; } else { isSlidingToLast = false; } } }); } public interface LoadingData { void onLoadMore(); } }
Demo链接
相关文章推荐
- 单机Web服务器性能浅论
- 函数插值生成波动率曲面
- 实现自己的string2int
- 实现自己的string2int
- Android Handler中的handleMessage方法和post方法之源码剖析
- 翻译:如何在Node.js和Express中使用MySql
- 使用IntelliJ IDEA开发SpringMVC网站(五)博客文章管理
- Android图片加载框架
- 湘乡农业产业化服务平台
- Android中导入别人的项目乱码
- 使用IntelliJ IDEA开发SpringMVC网站(四)用户管理
- django model中的save()方法
- SQL中的连接可以分为内连接,外连接,以及交叉连接 。
- C++ STL:vector介绍
- Cpp类似Matlab的矩阵运算库Armadillo
- windows7 下nginx1.8.1(稳定版本) 启动、停止和重新加载配置
- Splash动画启动app时空白屏
- Hive第二课简单应用
- Tweenmax 缓动效果
- ButterKnife 使用教程