Android app闪退后fragment重叠bug解决方法
16lz
2021-01-23
方法一
通过注释掉这句话,这样主 Activity 因为种种原因被回收的时候就不会保存之前的 fragment state
@OverrideprotectedvoidonSaveInstanceState(Bundle outState) {//如果用以下这种做法则不保存状态,再次进来的话会显示默认tab//总是执行这句代码来调用父类去保存视图层的状态//super.onSaveInstanceState(outState);}
方法二、(推荐使用)
重写onAttachFragment,重新让新的Fragment指向了原本未被销毁的fragment,它就是onAttach方法对应的Fragment对象
@Override public void onAttachFragment(Fragment fragment) { if (tab1 == null && fragment instanceof Tab1Fragment) tab1 = fragment; if (tab2 == null && fragment instanceof Tab2Fragment) tab2 = fragment; if (tab3 == null && fragment instanceof Tab3Fragment) tab3 = fragment; if (tab4 == null && fragment instanceof Tab4Fragment) tab4 = fragment; }
方法三
同样是阻止系统恢复Fragment state,在FragmentActivity保存所有Fragment状态前把Fragment从FragmentManager中移除掉。
protected void onSaveInstanceState(Bundle outState) { FragmentTransaction transaction = fm.beginTransaction(); transaction.remove(tab1); transaction.remove(tab2); transaction.remove(tab3); transaction.remove(tab4); transaction.commitAllowingStateLoss(); super.onSaveInstanceState(outState); }
更多相关文章
- android横竖屏切换、键盘推出状态改变的处理
- Android 完全退出当前应用程序的四种正确方法
- Handler 使用方法详解
- Linux下的两种timer方法 (Android 下NDK开发)
- Android中VideoView播放当前工程中视频文件的方法
- Android Studio 中报错 程序包org.apache.http不存在 的解决方法
- Android中使用Makefile编译程序和库的方法
- Android编程获取网络连接状态及调用网络配置界面
- Google地图(Map)API在J2ME中使用方法