android - 使用轮播管理器库时回收站视图未更新
问题描述
我正在尝试将图像数据拉入 Recycler 视图(每个子项都是一个 PagerSnapHelper 元素),但面临以下问题
1 - 第一次加载时,recycler 视图没有得到更新,子元素似乎未对齐。
2 - 我必须滑动或触摸屏幕才能重新加载视图,然后所有元素都显示正常。
错误的,第一次加载 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())
解决方案
每当您设置列表数据时,您都必须notifyDataSetChange()
在您的适配器上。这样你会告诉你的程序:“嘿,我更新了一些东西,给我看看!”
fun setListData(list: ArrayList<GalleryPopupObjectOrSomethingLikeThat>) {
yourAdapterList = list
notifyDataSetChange()
}
推荐阅读
- java - 我可以在我的类的构造函数中创建其他类的实例吗?
- python - 如何连接 MS Access 表成为 django 表单的后端?
- php - Laravel 5.2 重定向
- verilog - 在 Verilog 中同步两个状态机与稍微倾斜时钟的正确方法
- python - 从 DF 列将值插入字典 - Pandas (Python)
- ios - 使用 CoreML 推断金属纹理子区域
- windows - 在没有 Chocolatey 的情况下安装 Meteor.js
- javascript - 如何使用 Express-Validato 验证出生日期?
- c# - c# Xamarin - System.IO.FileNotFoundException
- liferay - 我可以在 1&1 上使用 Liferay 门户吗?