我有一个FragmentStateAdapter作为ViewPager2的适配器。
class DefaultFragmentStateAdapter(fragment: Fragment) : FragmentStateAdapter(fragment) {
var items = listOf<Fragment>()
set(value) {
field = value
notifyDateSetChanged()
}
override fun getItemCount(): Int = items.size
override fun createFragment(position: Int): Fragment = items[position]
}
adapters项可以根据用户选择的日期而改变,因此它需要动态。
发生的情况是,在我调用adapter.items = {new_fragments}
之后,当前片段没有重新加载,只有在我进入ViewPager的最后一页并返回首页之后,我才能看到更新的片段。
调用notifyDataSetChanged
时,当前片段不会更新。
如何管理更新当前显示的片段?
答案 0 :(得分:4)
我不得不重写以下两种方法...
override fun getItemId(position: Int): Long {
return items[position].id
}
override fun containsItem(itemId: Long): Boolean = items.any { it.id == itemId }
...使其正常工作!
答案 1 :(得分:0)
我发现的最好方法是setUserVisibleHint
将此添加到您的片段
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
// load data here
}else{
// fragment is no longer visible
}
}