我对此感到非常困惑。我有一个带列表导航的 actionbar
。我点击列表依次打开2个fragment
并显示在同一个activity中。我基本上是用这种方法替换它们:
public void openFragment(AprilAppsFragment createdFragment){
if (createdFragment.getClass().isInstance(getDisplayedFragment()))
return;
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
transaction.replace( R.id.main_fragment, createdFragment, "displayed fragment");
transaction.addToBackStack(null);
transaction.commit();
}
我打开 fragment A,然后打开 fragment B,然后旋转屏幕。正在重新创建 fragment A 导致我的应用崩溃
为什么会这样,因为我正在使用替换?如何避免重新创建不再显示的 fragment ,同时又不失去对它们进行反压的可能性?
最佳答案
你的问题是你没有为你的 fragment 保存状态,因为你还没有添加
android:configChanges="orientation|screenSize"
您的第一个 fragment 再次被调用,并且由于您没有保存状态,您的应用程序崩溃了。所以最好在 list 中的 Activity 声明中添加上面的行,例如:
<activity android:name=".yourActivity" android:configChanges="orientation|screenSize"
并重写 onSaveInstanceState 并保存两个 fragment 的状态。在你的 onCreate 中做这个检查:
if(savedInstanceState != null){
fragmentA = (FragmentA) fragmentManager.getFragment(savedInstanceState, stringValueA);
fragmentB = (FragmentB) fragmentManager.getFragment(savedInstanceState, stringValueB);
}
然后检查您的任何 fragment 是否不为空,然后创建其实例并将其设置为 fragmentTransaction.relplace。或者在您的 for openFragment 方法中执行此操作。
干杯,
关于android - fragment 在 Activity 轮换上重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15074320/