【发布时间】:2021-09-22 14:35:06
【问题描述】:
我正在使用ViewPager2 和ListAdapter 水平滚动Recycler.ViewHolder 项目,一次显示一个项目。当内容不适合屏幕时,每个都可以垂直滚动。
一旦项目不再可见,我想重置它们的滚动状态,因为视图持有者可能会被另一个项目重用,而且它更整洁。
我知道如何在ViewHolder 中重置滚动状态,但是在哪里我可以把这段代码放在哪里?
我首先认为它可能在托管ViewPager2 的片段中,我可以在其中注册一个回调ViewPager2.OnPageChangeCallback 与viewpager:
private var lastPosition = -1
private var callback = object: ViewPager2.OnPageChangeCallback() {
override fun onPageSelected(position: Int) {
if (lastPosition >= 0) {
// reset scroll here
val v: MyViewHolder = ???(position)
v.resetScrollState()
}
lastPosition = position
}
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewpager = binding.itemPager
viewpager.adapter = [...]
viewpager.registerOnPageChangeCallback(callback)
}
(其中binding.itemPager 指向ViewPager2)
但我不知道如何轻松获取视图持有者,除非将其存储(例如在集合中)以便我可以从 position 检索它。然后我仍然必须第一次正确设置lastPosition,但这是次要的。
我的问题: 有什么办法
- 设置一个监听器来改变页面,访问视图持有者?
- 或者,在
position的函数中检索视图持有者?
或者有没有更好的方法来处理这个问题?
【问题讨论】:
标签: android android-jetpack android-viewpager2