创新实训博客(16)——Android开发中View的下拉刷新与上拉加载探索与实现
2020-07-14 06:21
686 查看
Google官方提供的组件
SwipeRefreshLayout:只有下拉刷新,没有上拉加载更多的功能
不过也足够用,首先实现下拉刷新
OnRefreshListener
需要重写其中的下拉刷新函数
因为我是在首页的第一个Fragment中执行,而这里面有三个不同的页面。
首先我应该判断是哪一个页面,然后执行对应的操作。
[code] val onRefreshListener = SwipeRefreshLayout.OnRefreshListener { // 向上到顶部 // Toast.makeText(activity, "正在刷新...", Toast.LENGTH_SHORT).show() if(currentPage == 1){ fetchSubData() } else if(currentPage == 2){ globalList_2 = LinkedList<ArticleItem>() listPage = 1 fetchLatestData(listPage) } else if(currentPage == 3){ fetchHotData() } }
遇到的问题
遇到了一个错误,The content of the adapter has changed but ListView did not receive a notification。
这个问题出现的原因是,我在子线程中修改了数据,而这部分数据在没有外面套着下拉刷新的这个组件的时候是完好的,但是因为有了外部的这个组件,因此我需要把这个给他写在主线程里,使用handler。
解决方案
[code] val handler = @SuppressLint("HandlerLeak") object : Handler() { override fun handleMessage(msg: Message) { super.handleMessage(msg) if (msg.what == 1) { setSubList(globalList) val swipeView:SwipeRefreshLayout = activity!!.findViewById(R.id.index_swipe_layout) swipeView.isRefreshing = false }
AbsListView.OnScrollListener
然后实现上拉加载,需要设置这么一个监听器。
判断上拉到底
[code] // 上拉 fun onScrollRefresh(){ val listView:ListView = activity!!.findViewById(R.id.index_blog_list) val onScrollChangeListener = object: AbsListView.OnScrollListener { override fun onScroll(view: AbsListView?, firstVisibleItem: Int, visibleItemCount: Int, totalItemCount: Int) { if ((firstVisibleItem + visibleItemCount) == totalItemCount) { val lastVisibleItemView = view!!.getChildAt(view.childCount - 1) if (lastVisibleItemView != null && lastVisibleItemView.bottom == view.height) { // 向下到底部 if (currentPage == 2) { Toast.makeText(activity, "正在加载...", Toast.LENGTH_SHORT).show() listPage += 1 fetchLatestData(listPage) } } } // 更新position lastItem = firstVisibleItem } override fun onScrollStateChanged(view: AbsListView?, scrollState: Int) { } } listView.setOnScrollListener(onScrollChangeListener) }
实现的效果示意图
相关文章推荐
- Android实现RecyclerView的下拉刷新和上拉加载更多
- 创新实训博客(33)——探索Android开发中的消息推送功能(推送服务模块进阶设计)
- 【Android开发笔记】pulltorefresh实现下拉刷新和上拉加载更多
- Android实现RecyclerView的下拉刷新和上拉加载更多
- 创新实训博客(24)——探索Android开发中的消息推送功能(创建通知、创建展开式通知、通过通知打开Activity)
- Android控件PullRefreshViewGroup实现下拉刷新和上拉加载
- Android实现RecyclerView的下拉刷新和上拉加载更多
- Android 实现下拉刷新和上拉加载更多的RECYCLERVIEW和SCROLLVIEW
- 创新实训博客(30)——探索Android开发中的消息推送功能(推送服务模块)
- Android中使用RecyclerView实现下拉刷新和上拉加载
- Android 5.X新特性之为RecyclerView添加下拉刷新和上拉加载及SwipeRefreshLayout实现原理
- Android实现RecyclerView的下拉刷新和上拉加载更多
- MUI进行APP混合开发实现下拉刷新和上拉加载[原创]_Android_脚本之家
- 创新实训博客(23)——探索Android开发中的消息推送功能(Notification的学习)
- android开发游记:listview下拉刷新和上拉加载的实现
- Android开发丶谷歌官方刷新控件SwipeRefreshLayout下拉刷新的实现和上拉加载的拓展
- Android程序开发之使用PullToRefresh实现下拉刷新和上拉加载
- Android 5.X新特性之为RecyclerView添加下拉刷新和上拉加载及SwipeRefreshLayout实现原理
- Android实现RecyclerView的下拉刷新和上拉加载更多
- Android RecyclerView实现下拉刷新和上拉加载