上拉加载更多bug

上拉加载更多bug

在搜索模块切换标签数据的时候发现的问题


http://img1.sycdn.imooc.com//climg/611f9e3a085bc9d210802340.jpg


http://img1.sycdn.imooc.com//climg/611f9e3a08d86cd910802340.jpg

问题如图,数据不够充满屏幕时,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() 没执行


请问一下老师这个怎么解决


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
LovelyChubby 2021-08-22 11:43:08

更新下master,已经解决了这个bug,更新后看下LiadMoreRecycleView的变动

  • 提问者 默小铭 #1

    老师,是哪个仓库更新了,没找到,ASpro,和hiui出现问题的代码,重新下载下来看,还是原来没改动的代码

    2021-08-22 16:11:48
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师