ViewPager не загружает страницы после первого перехода на ViewPager - PullRequest
0 голосов
/ 19 марта 2020

У меня есть фрагмент, который содержит 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.

1 Ответ

0 голосов
/ 19 марта 2020

Вы используете

activity?.let {
    mPagerAdapter = ForgotPasswordPagerAdapter(it.supportFragmentManager)
}

То есть, используя FragmentManager действия. Это всегда неправильно и источник вашей проблемы. Вместо этого вам нужно использовать фрагмент childFragmentManager:

mPagerAdapter = ForgotPasswordPagerAdapter(childFragmentManager)
...