上拉加载更多bug
在搜索模块切换标签数据的时候发现的问题
问题如图,数据不够充满屏幕时,footerView显示了
问题复现:
第一张图有两个chip,当我点击"手机"时,向上滑动,然后加载到第二页的数据时,直接点击"iphone",然后就出现这个问题了
自己在相关代码打log日志分析看到,"手机"列表滑到第二页且未到最后一条数据,此时footerView已经add,如果拖到底后会removefootView,但这时直接切到"iphone",footview好像也带过去了
相关代码:
private fun doKeyWordSearch(keyWord: KeyWord) {
//1.搜索框高亮 搜索词
searchView.setKeyWord(keyWord.keyWord, updateHistoryListener)
//2.keyword 存储起来
viewModel.saveHistory(keyWord)
//3. 发起 goodsSearch
val kwClearIconView: View? = searchView.findViewById(R.id.id_search_clear_icon)
kwClearIconView?.isEnabled = false
viewModel.goodsSearch(keyWord.keyWord, true)
//bugfix: 每次搜索都会执行这里,都会执行一次addobserver ,所以需要过滤下
if (!viewModel.goodsSearchLiveData.hasObservers()) {
viewModel.goodsSearchLiveData.observe(this, Observer { goodsList ->
kwClearIconView?.isEnabled = true
goodsSearchView?.loadFinished(!goodsList.isNullOrEmpty())
val loadInit = viewModel.pageIndex == PAGE_INIT_INDEX;
if (goodsList.isNullOrEmpty()) {
if (loadInit) {
updateViewStatus(STATUS_EMPTY)
}
} else {
updateViewStatus(STATUS_GOODS_SEARCH)
goodsSearchView?.bindData(goodsList, loadInit)
}
})
}
}
/**
* 提供外部方法,传参进来说明加载数据完成,可以隐藏footView了
*/
fun loadFinished(success: Boolean) {
if (adapter !is HiAdapter) {
HiLog.e("loadFinished must use hiAdapter")
return
}
isLoadingMore = false
val hiAdapter = adapter as HiAdapter
if (!success) {
footerView?.let {
Log.i("测试", "loadFinished ${it.parent} ")
if (it.parent != null) {
Log.i("测试", "loadFinished removeFooterView")
hiAdapter.removeFooterView(it)
}
}
}
}
goodsSearchView?.loadFinished(!goodsList.isNullOrEmpty()) 看老师项目源码,这里是当接口没数据的时候传loadFinished()传false,然后改造了一下,当数据是第一页,然后数据少于预加载的5条数据,就直接传false
相关代码:
if (mViewModel.pageIndex == 1 && goodsSearchList?.size!! < 5) {
goodsSearchView?.loadFinished(false)
} else {
goodsSearchView?.loadFinished(!goodsSearchList.isNullOrEmpty())
}
发现没用,loadFinshed() 里面打日志发现it.parent==null,导致 removeFooterView() 没执行
请问一下老师这个怎么解决
14
收起
正在回答 回答被采纳积分+1
1回答
LovelyChubby
2021-08-22 11:43:08
更新下master,已经解决了这个bug,更新后看下LiadMoreRecycleView的变动
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星