Я думаю, вы не должны хранить ссылки на фрагменты вне адаптера. Они должны быть созданы внутри адаптера. Возможно, адаптер можно записать так:
class FragmentStateViewPagerAdapter(
private val tabTitles: List<String>,
fragmentManager: FragmentManager
) : FragmentStatePagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
private val tabs: List<Fragment> = (tabTitles.indices).map { YourFragment.newInstance(it) }
override fun getCount(): Int = tabTitles.size
override fun getItem(position: Int): Fragment = tabs[position]
override fun getPageTitle(position: Int): CharSequence {
// Generate a title depending on the position.
return tabTitles[position]
}
}
Но ваш пример также работает. Может быть, требуется больше кода. Также, как ни странно, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT
не требуется в моем случае (показывает ошибку, но не должна).
class MainActivity : AppCompatActivity() {
private lateinit var adapter: FragmentViewPagerAdapter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val titledFragments = (1..3).map { TitledFragment(PlusOneFragment(), it.toString()) }
adapter = FragmentViewPagerAdapter(titledFragments, supportFragmentManager)
with(view_pager) {
adapter = this@MainActivity.adapter
}
}
}