【问题标题】:ViewPager not loading Pages after the first time I navigate to the ViewPager第一次导航到 ViewPager 后,ViewPager 未加载页面
【发布时间】:2020-03-19 19:16:25
【问题描述】:

我有一个包含 ViewPager 的片段。当我导航到这个片段时,我看到了预期的第一页。但是,如果我回击,然后再次导航到该片段,我会看到一个空白屏幕......

我在 Layout Inspector 中注意到的是,当我第二次导航到 ViewPager Fragment 时,ViewPager 存在,但没有任何页面片段在层次结构中。

这是我在 ViewPagerFragment 中设置 viewPager 的方法:

/**
 * 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 何时实际填充其页面?因为在我看来,它们是第一次被填充,但不是第二次......

编辑:

我在背面调试了 Activity 的片段,并注意到页面在那个片段堆栈中,但不是实际的 viewPager 片段。

【问题讨论】:

    标签: android android-fragments android-viewpager


    【解决方案1】:

    你正在使用

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

    即,使用活动的 FragmentManager。这总是错误的做法,也是问题的根源。相反,您需要使用 Fragment 的childFragmentManager

    mPagerAdapter = ForgotPasswordPagerAdapter(childFragmentManager)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多