gpt4 book ai didi

android - fragment 在 Activity 轮换上重叠

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:39:57 24 4
gpt4 key购买 nike

我对此感到非常困惑。我有一个带列表导航的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com