У меня есть ViewPager
с адаптером FragmentStatePagerAdapter
. Для простоты у меня есть 2 фрагмента в моем ViewPager.
class MyPagerAdapter(fragmentManager: FragmentManager): FragmentStatePagerAdapter(fragmentManager) {
var firstFragment: SampleFragment? = null
var secondFragment: SampleFragment? = null
override fun getItem(position: Int): Fragment {
return when(position) {
0 -> SampleFragment()
.also { firstFragment = it }
1 -> SampleFragment()
.also { secondFragment = it }
else -> Fragment()
}
}
override fun getCount(): Int {
return 2
}
}
My SampleFragment
- это простой фрагмент с TextView
на виде.
class SampleFragment: Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_sample, container, false)
}
fun setText(text: String) {
text_view.text = text
}
}
Теперь я в MainActivity, где у меня есть ViewPager, у меня ниже строки
val adapter = MyPagerAdapter(supportFragmentManager)
view_pager.adapter = adapter
adapter.firstFragment?.setText("Some Text")
Итак, вот проблема. После инициализации (установки адаптера) моего ViewPager я ожидаю, что мои фрагменты будут созданы. Но это не так. Мои фрагменты инициализируются после определенной задержки. Поэтому, когда я хочу установить текст TextView внутри моего фрагмента с помощью строки
adapter.firstFragment?.setText("Some Text")
firstFragment
равно нулю.
Когда я отлаживаю, я вижу это после
view_pager.adapter = adapter
getCount()
адаптера вызывается. А потом
adapter.firstFragment? .setText ("Некоторый текст")
будет выполнен, который не имеет никакого эффекта, так как firstFragment
равно null
. И через секунду или около того getItem()
адаптера вызывается.
Итак, мой вопрос: почему фрагменты адаптера моего viewpager не инициализируются сразу? Если я что-то упустил, не могли бы вы указать. Или же ожидается поведение ViewPager Adapter, тогда как я могу сделать так, чтобы фрагменты viewpager инициализировались при инициализации пейджера?