У меня есть фрагмент, который содержит ViewPager. Когда я перехожу к этому фрагменту, я вижу первую страницу, как и ожидалось. Однако, если я нанесу ответный удар, а затем снова перейду к этому фрагменту, я получу пустой белый экран ...
Что я заметил в Инспекторе макетов, так это то, что при переходе к ViewPager Фрагментируйте второй раз, ViewPager присутствует, но ни один из фрагментов страницы не находится в иерархии.
Вот как я настроил свой viewPager в своем ViewPagerFragment:
/**
* Variables
*/
var pageOneFragment = ForgotPasswordInitiateFragment()
var pageTwoFragment = ForgotPasswordSubmitCodeFragment()
var pageThreeFragment = ForgotPasswordSubmitPasswordFragment()
lateinit var mViewPager: ForgotPasswordViewPager
lateinit var mPagerAdapter: ForgotPasswordPagerAdapter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.forgot_password_pager_fragment, container, false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
forgotPasswordViewModel = ViewModelProviders.of(this, viewModelFactory)
.get(ForgotPasswordViewModel::class.java)
pageOneFragment.viewPager = this
pageTwoFragment.viewPager = this
pageThreeFragment.viewPager = this
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
activity?.let {
mPagerAdapter = ForgotPasswordPagerAdapter(it.supportFragmentManager)
}
mViewPager = viewPager
mViewPager.adapter = mPagerAdapter
mViewPager.setListeners()
}
override fun onResume() {
super.onResume()
}
inner class ForgotPasswordPagerAdapter(fm: FragmentManager): FragmentPagerAdapter(fm) {
override fun getItem(position: Int): Fragment {
when (position) {
0 -> return pageOneFragment
1 -> return pageTwoFragment
2 -> return pageThreeFragment
else -> throw IllegalStateException("Pager position $position is out of bounds.")
}
}
override fun getCount(): Int {
return 3
}
}
Я попытался установить все свои mViewPager
конфигурации в функцию onResume
, но произошло то же самое.
Когда viewPager фактически заполняет свои страницы? Потому что мне кажется, что они заполняются в первый раз, но не во второй ....
РЕДАКТИРОВАТЬ:
Я отладил фрагменты действия на спине нажатой и заметил, что страницы были в этом стеке фрагментов, но не в самом фрагменте viewPager.