【发布时间】: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.```
【问题讨论】: