gpt4 book ai didi

android - FragmentStateAdapter 在调用 notifyDataSetChanged 时不调用 createFragment

转载 作者:行者123 更新时间:2023-12-04 08:47:10 24 4
gpt4 key购买 nike

我正在使用 ViewPager2FragmentStateAdapter

public class MyAdapter extends FragmentStateAdapter {

public MyAdapter(@NonNull Fragment fragment) {
super(fragment);
}

@NonNull
@Override
public Fragment createFragment(int position) {
return MyFragment.newInstance(MyClass.func(position));
}

@Override
public int getItemCount() {
return MyClass.NUM;
}

}

不幸的是,在适配器上调用 notifyDataSetChanged() 根本没有任何效果。 (调用 notifyItemChanged(position) 工作正常。)

我该如何解决这个问题?

最佳答案

我已经为此 here 创建了一个错误报告在问题追踪器中。不过,对我来说,即使是 notifyItemChanged(position:)notifyItemRangeChanged(positionStart:itemCount:) 方法也无法正常运行。

该错误是由于 FragmentStateAdapter.getItemId(position:) 方法的默认实现导致的,该方法仅返回传递给它的 position。因此,每个 positionitemIdFragmentStateAdapter.notifyDataSetChanged() 调用之前和之后都是相同的,因此 Fragment 将永远被重新创建。

一种可能的解决方法是在您的 FragmentStateAdapter 实现中为每个页面分配一个唯一的 ID,并在调用 notifyDataSetChanged() 方法时为每个页面分配一个新的 ID。请参阅下面 ViewPagerAdapter 类中的 init block ,它有助于解决此问题: AdapterDataObserver 对象已在此 init 中注册 block ,以便在调用 notifyDataSetChanged() 时接收回调。

class ViewPagerAdapter(fragmentActivity: FragmentActivity) :
FragmentStateAdapter(fragmentActivity) {

private var counter = 0L
private var itemIds: List<Long>

init {
itemIds = generateListOfItemIds()

val adapterDataObserver = object : AdapterDataObserver() {

override fun onChanged() {
itemIds = generateListOfItemIds()
}
}

registerAdapterDataObserver(adapterDataObserver)
}

override fun createFragment(position: Int): Fragment {
return PageFragment.newInstance(position)
}

override fun getItemCount(): Int {
return itemIds.size
}

override fun getItemId(position: Int): Long {
return itemIds[position]
}

override fun containsItem(itemId: Long): Boolean {
return itemIds.contains(itemId)
}

private fun generateListOfItemIds() = (1..5).map { counter++ }
}

关于android - FragmentStateAdapter 在调用 notifyDataSetChanged 时不调用 createFragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64253779/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com