notifyDataSetChanged之后,FragmentStateAdapter不重新创建currentFragment

时间:2020-03-31 20:53:06

标签: android android-fragments android-viewpager2

我有一个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时,当前片段不会更新。

如何管理更新当前显示的片段?

2 个答案:

答案 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
    }
}