【发布时间】:2021-12-26 12:03:49
【问题描述】:
我有一个 viewpager2,里面有 FragmentStateAdapter() 适配器。我还有一个带有 4 个选项卡的选项卡布局。我对所有选项卡使用单个片段。名为 AllOrdersTab。 在我的架构中,我只是发送不同的值来将不同的 API 数据加载到 AllOrdersTab 片段。 选择每个选项卡布局时,为所有4个碎片首次创建并正常工作。之后,如果我滑回上一个选项卡,则不会再次创建或刷新它。 我想重新创建片段或在选项卡之间滑动时再次调用 API 的方法。我也读过这个页面。
FragmentStateAdapter not recreating currentFragment after notifyDataSetChanged
我试图这样做。所以我决定创建 4 个 Allorderstab() 片段实例。但从来没有为我工作,因为我猜片段的哈希码是相同的。
ViewPager2 适配器:
class ViewPagerOrdersAdapter(fm: FragmentManager,val listFragments:MutableList<Fragment>, viewlifecycler: Lifecycle) : FragmentStateAdapter(fm, viewlifecycler)
{
override fun getItemCount(): Int
{
return listFragments.size
}
override fun createFragment(position: Int): Fragment {
val args = Bundle()
when (position) {
1 -> {
args.putString("KEY_ID", "inProgress")
listFragments[position].arguments = args
return listFragments[position]
}
2 -> {
args.putString("KEY_ID", "cancel")
listFragments[position].arguments = args
return listFragments[position]
}
3 ->
{
args.putString("KEY_ID","deliver")
listFragments[position].arguments=args
return listFragments[position]
}
else -> {
args.putString("KEY_ID", "all")
listFragments[position].arguments = args
return listFragments[position]
}
}
}
override fun getItemId(position: Int): Long {
return listFragments[position].hashCode().toLong()
}
override fun containsItem(itemId: Long): Boolean {
return listFragments.find {it.id.hashCode().toLong() == itemId } != null
}
}
在这里我创建了 4 个 Allorderstab() 片段实例。
设置 ViewPager2 适配器 主片段:
val fragments:MutableList<Fragment> = mutableListOf(Allorderstab(), Allorderstab(), Allorderstab(), Allorderstab())
vp.setAdapter(ViewPagerOrdersAdapter(this.childFragmentManager,fragments, lifecycle))
AllOrderstab 片段:
override fun onCreateView(inflater: LayoutInflater,container: ViewGroup?, savedInstanceState: Bundle?): View? {
val bundle = arguments
bundle?.let {
val myStatus = bundle.getString("KEY_ID")
myStatus?.let{
//getting history of each tab orders - calling API
myviewModel.getOrdersHistory(tempTn,myStatus)
}
}
}
总而言之,我不知道如何在标签之间滑动时刷新。如果我对所有 4 个选项卡都有一个片段。
【问题讨论】:
标签: android kotlin android-fragments android-viewpager2