FragmentStateAdapter 在notifyDataSetChanged 后不重新创建currentFragment [英] FragmentStateAdapter not recreating currentFragment after notifyDataSetChanged

查看:133
本文介绍了FragmentStateAdapter 在notifyDataSetChanged 后不重新创建currentFragment的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆