FragmentStateAdapter 在notifyDataSetChanged 后不重新创建currentFragment [英] FragmentStateAdapter not recreating currentFragment after notifyDataSetChanged
问题描述
我有一个 FragmentStateAdapter 作为 ViewPager2 的适配器.
I have a FragmentStateAdapter as the adapter of a 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]
}
适配器项可以根据用户选择的日期进行更改,因此它需要是动态的.发生的情况是,在我调用 adapter.items = {new_fragments}
之后,当前片段没有重新加载,只有在我转到 ViewPager 中的最后一页并返回到第一页后,我才能看到更新的片段.调用 notifyDataSetChanged
时,当前片段不会更新.
The adapters item can change depending on the date a user has selected, so it needs to be dynamical.
What happens is that after I call adapter.items = {new_fragments}
current fragment is not reloaded, only after I go to one of the last pages in the ViewPager and return to the first page can I see the updated fragment.
The current fragment does not update when notifyDataSetChanged
is called.
如何更新当前显示的片段?
How can I manage to update current displayed fragment?
推荐答案
我不得不重写以下两个方法...
I had to override the following two methods...
override fun getItemId(position: Int): Long {
return items[position].id
}
override fun containsItem(itemId: Long): Boolean = items.any { it.id == itemId }
...让它发挥作用!
这篇关于FragmentStateAdapter 在notifyDataSetChanged 后不重新创建currentFragment的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!