【问题标题】:How to restore ViewPager state on switch from fragment B to fragment A如何在从片段 B 切换到片段 A 时恢复 ViewPager 状态
【发布时间】:2019-11-22 08:03:42
【问题描述】:

在我的场景中,我在片段 A 中有 viewpager,在 viewpage 中有片段 C 和片段 D。现在我移动到片段 B 并返回片段 A 并得到这个崩溃 java.lang.IllegalStateException:指定的孩子已经有一个父母。您必须先在孩子的父母上调用 removeView()。

adapter=ViewPagerAdapter(childFragmentManager)
  class ViewPagerAdapter internal constructor(fm: FragmentManager) :  FragmentStatePagerAdapter(fm,BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {

        private val COUNT = 3

        override fun getItem(position: Int): Fragment {
            var fragment: Fragment? = null
            when (position) {
                0 -> fragment = AdditionInfo()
                1 -> fragment = UploadFiles()
                2 -> fragment = UploadDocs()
            }

            return fragment!!
        }

        override fun getCount(): Int {
            return COUNT
        }

        override fun getPageTitle(position: Int): CharSequence? {
            return "Tab " + (position + 1)
        }

        override fun getItemPosition(`object`: Any): Int {
            return POSITION_NONE
        }
    }
     fun viewpagerListener() {
        viewOfLayout!!.upload_info_doc_viewpager?.setAllowedSwipeDirection(SwipeDirection.left)
        viewOfLayout!!.upload_info_doc_viewpager?.offscreenPageLimit = 3
        viewOfLayout!!.upload_info_doc_viewpager?.setSaveFromParentEnabled(true)
        viewOfLayout!!.upload_info_doc_viewpager?.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {

            override fun onPageScrollStateChanged(state: Int) {
            }

            override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {

                currentPage = position

            }

            override fun onPageSelected(position: Int) {

            }


        })
    }

When i get back to Fragment A i do this 
 override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                              savedInstanceState: Bundle?): View? {
 if(viewOfLayout==null){
// my code
viewOfLayout = inflater.inflate(R.layout.layout_file, container, false)
 adapter=ViewPagerAdapter(childFragmentManager)

}
 return viewOfLayout
}
when onCreateView method called and viewOfLayout is already in memory but its called viewpager fragments automatically.```


【问题讨论】:

    标签: android android-viewpager


    【解决方案1】:

    片段 A 不显示时只保留它。

    mViewPager.setOffscreenPageLimit(number);
    

    number 变量是 viewpager 中的片段数。

    【讨论】:

    • 已经这样做了,在我的情况下不起作用viewOfLayout!!.upload_info_doc_viewpager?.offscreenPageLimit = 3
    • 是的,但是在适配器和有趣的 viewPagerAdapter 之外尝试一下。
    猜你喜欢
    • 2020-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多