Jac*_*ień 4 android android-fragments
我对此非常困惑.我有一个actionbar列表导航.我点击列表fragment一个接一个地打开2 并显示在同一个活动中.我基本上用这种方法替换它们:
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();
}
Run Code Online (Sandbox Code Playgroud)
我打开片段A,然后打开片段B,然后旋转屏幕.片段A正在重新创建崩溃我的应用程序
是的,因为我正在使用替换?如何避免重新创建不再显示的片段,而不会失去对其进行反压的可能性?
您的问题是您没有为片段保存状态,因为您还没有添加
android:configChanges="orientation|screenSize"
Run Code Online (Sandbox Code Playgroud)
您的第一个片段再次被调用,因为您没有保存状态,您的应用程序崩溃了.因此,您可以在清单中的活动声明中添加上面的行,例如:
<activity android:name=".yourActivity" android:configChanges="orientation|screenSize"
Run Code Online (Sandbox Code Playgroud)
并覆盖onSaveInstanceState并保存两个片段的状态.在你的onCreate中只需做这个检查:
if(savedInstanceState != null){
fragmentA = (FragmentA) fragmentManager.getFragment(savedInstanceState, stringValueA);
fragmentB = (FragmentB) fragmentManager.getFragment(savedInstanceState, stringValueB);
}
Run Code Online (Sandbox Code Playgroud)
然后检查您的任何片段是否为空,而不是创建其实例并将其设置为fragmentTransaction.relplace.或者在openFragment方法中执行此操作.
干杯,
| 归档时间: |
|
| 查看次数: |
2726 次 |
| 最近记录: |