首页 > 解决方案 > 使用轮播管理器库时回收站视图未更新

问题描述

我正在尝试将图像数据拉入 Recycler 视图(每个子项都是一个 PagerSnapHelper 元素),但面临以下问题
1 - 第一次加载时,recycler 视图没有得到更新,子元素似乎未对齐。
2 - 我必须滑动或触摸屏幕才能重新加载视图,然后所有元素都显示正常。

错误的,第一次加载 Recycler 视图时 错误的,第一次加载 Recycler 视图时

正确的,在我滑动视图后 正确的,在我滑动视图后

活动中

override fun onGetDataSuccess(obj: RESP_DetailDiscover.ObjectDetailDiscover) {
        if (obj.gallery_popup.isNullOrEmpty()) {
            adapterPopup.setListData(mutableListOf())
        } else {
            adapterPopup.setListData(obj.gallery_popup)
        }
}

adapterPopup = PopupAdapter(applicationContext)
        val layoutManager = ZoomCenterCardLayoutManager(this)
        layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL)
        val snapHelper = PagerSnapHelper()
        snapHelper.attachToRecyclerView(rcvPopup)

        rcvPopup.addOnScrollListener(CenterScrollListener())
        rcvPopup.getViewTreeObserver().addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener {
            override fun onGlobalLayout() {
                rcvPopup.getViewTreeObserver().removeOnGlobalLayoutListener(this)
                val range = this@DetailDiscoverActivity.getResources().getDimension(R.dimen.width_item_horizontal_popup).toInt()
                val margin = this@DetailDiscoverActivity.getResources().getDimension(R.dimen.margin_item_horizontal_popup).toInt()
                val extent = (rcvPopup.getWidth() - range) / 2 - margin
                rcvPopup.setPadding(extent, 0, extent, 0)
                rcvPopup.setClipToPadding(false)
            }
        })
        rcvPopup.layoutManager = layoutManager
        rcvPopup.adapter = adapterPopup
        layoutManager.smoothScrollToPosition(rcvPopup, null, 0)
        rcvPopup.addItemDecoration(LinePagerIndicatorDecoration())

标签: androidkotlin

解决方案


每当您设置列表数据时,您都必须notifyDataSetChange()在您的适配器上。这样你会告诉你的程序:“嘿,我更新了一些东西,给我看看!”

fun setListData(list: ArrayList<GalleryPopupObjectOrSomethingLikeThat>) {
  yourAdapterList = list
  notifyDataSetChange()
}

推荐阅读