FragmentStateAdapter 在 notifyDataSetChanged 后不重新创建 currentFragment
FragmentStateAdapter not recreating currentFragment after notifyDataSetChanged
我有一个 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]
}
适配器项可能会根据用户选择的日期而变化,因此它需要是动态的。
发生的事情是,在我调用 adapter.items = {new_fragments}
之后,当前片段没有重新加载,只有在我转到 ViewPager 中的最后一页并且 return 到第一页之后,我才能看到更新的片段。
调用 notifyDataSetChanged
时,当前片段不会更新。
如何更新当前显示的片段?
我找到的最佳方法是 setUserVisibleHint
将此添加到您的片段中
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
// load data here
}else{
// fragment is no longer visible
}
}
我不得不重写以下两个方法...
override fun getItemId(position: Int): Long {
return items[position].id
}
override fun containsItem(itemId: Long): Boolean = items.any { it.id == itemId }
...让它发挥作用!
我有一个 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]
}
适配器项可能会根据用户选择的日期而变化,因此它需要是动态的。
发生的事情是,在我调用 adapter.items = {new_fragments}
之后,当前片段没有重新加载,只有在我转到 ViewPager 中的最后一页并且 return 到第一页之后,我才能看到更新的片段。
调用 notifyDataSetChanged
时,当前片段不会更新。
如何更新当前显示的片段?
我找到的最佳方法是 setUserVisibleHint
将此添加到您的片段中
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
// load data here
}else{
// fragment is no longer visible
}
}
我不得不重写以下两个方法...
override fun getItemId(position: Int): Long {
return items[position].id
}
override fun containsItem(itemId: Long): Boolean = items.any { it.id == itemId }
...让它发挥作用!