问题描述
- fragment+viewpager可以运行,但是会报一个错误 50C
- 我用framement+viewpager做了三个页面的切换,调试之后在手机上可以运行,但是每次切换界面都会报如下错误
moveToState: Fragment state for CustomerInf{55de94e #1 id=0x7f0c005d android:switcher:2131492957:0} not updated inline; expected state 3 found 2
其中粗体部分是一个是其中一个fragment
我总共有三个CustomerInf,按在viewpage中的顺序为CustomerInf,EquipInf,和FAQ它报错的时候总是报相邻的错误,比如当我从CustonInf切换到EquipInf,系统就是提示Fragment state for FQAnot updated inline但我再从EquipInf切换到FAQ的时候就不会有问题,
我怀疑是viewpage储存的问题,但就是搞不懂。。
所以。。这到底怎么回事?另外,会有什么影响?因为我现在就只是放了三个不同的fragment,还没开始在fragment之前传数据,现在只是表面上看起来没什么问题,不知道以后会不会影响其他功能?谢谢!
解决方案
在activity中不同的frament之间项目替换的时候,FragmentManager只会remove和add这些frament,然而这些frament里面自己加载的frament(这里就是我们的CaptionPropertiesFragment)是没有被remove. 很显然这是一个缺陷!因为后一个frament(CaptionPropertiesFragment)很明显是依赖与他的父frament的,应该同时递归的remove.
那么如何解决这个问题呢!很显然就是在不用这个frament(ToggleCaptioningPreferenceFragment)的时候把他里面加载的frament给remove掉!这个操作在ToggleCaptioningPreferenceFragment的onDestroyView()里面就可以解决问题了!如下代码:
@Override
public void onDestroyView() {
super.onDestroyView();
if(mPropsFragment != null){ FragmentManager f = getFragmentManager(); if(f != null && !f.isDestroyed()){ final FragmentTransaction ft = f.beginTransaction(); if(ft != null){ ft.remove(mPropsFragment).commit(); } }}
}
这里要注意f.isDestroyed()这样来判断是否这个FragmentManager处于Destroyed,如果不加这个判断的话,横竖屏切换时候会出错!
时间: 2024-08-06 19:49:03