您的位置:首页 > 移动开发 > Android开发

创新实训博客(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)
}

实现的效果示意图

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐