FragmentStateAdapter()上的java createFragment()方法在创建适配器的新实例后不会再次运行
我使用ViewPager2和导航组件。在我的应用程序设置中,我有一个选项来控制ViewPager2中片段的数量(“下面的appMode”选项),以及哪个片段必须是第一个(“下面的primaryScreen”选项)。在我的适配器中,我选中该选项并创建必要的片段:
override fun getItemCount() = if (appMode == "both") 2 else 1
override fun createFragment(position: Int): Fragment {
return when (primaryScreen) {
"notes" -> if (position == 0) NotesFragment() else TasksFragment()
else -> if (position == 0) TasksFragment() else NotesFragment()
}
}
但当我回到我的ViewPager时,一切都不会改变,直到我重新启动我的应用程序。如果我在onDestroyView()中取消ViewPager适配器,我不知道它为什么不工作:
b.viewPager.adapter = null
adapter = null
以下是我如何将适配器应用于我的ViewPager2:
private var adapter: VPAdapter? = null
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
adapter = VPAdapter(this)
b.viewPager.adapter = adapter
}
我的ViewPager2适配器的完整代码:
class VPAdapter(fragment: Fragment) : FragmentStateAdapter(fragment) {
private val prefs by lazy {
fragment.requireContext().getSharedPreferences("MainSettings", Context.MODE_PRIVATE) }
private var appMode
get() = prefs.getString("appMode", "both")
set(value) = prefs.edit { putString("appMode", value) }
private var primaryScreen
get() = prefs.getString("primaryScreen", "notes")
set(value) = prefs.edit { putString("primaryScreen", value) }
override fun getItemCount() = if (appMode == "both") 2 else 1
override fun createFragment(position: Int): Fragment {
println("createFragment") // I use it to detect when it runs
return when (primaryScreen) {
"notes" -> if (position == 0) NotesFragment() else TasksFragment()
else -> if (position == 0) TasksFragment() else NotesFragment()
}
}
}
共 (0) 个答案