我的片段容器:
<FrameLayout
android:id="@+id/fragmentContainer"
android:layout_width="match_parent"
android:layout_height="match_parent" />
MapActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_map);
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.add(R.id.fragmentContainer, MainMapFragment.newInstance(), "MainMapFragment");
transaction.commit();
}
然后在我的应用程序的其余部分中,我做了:
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.fragmentContainer, NavigationFragment.newInstance());
transaction.addToBackStack("NavigationFragment");
transaction.commit();
如果我按下后退按钮或我的应用程序进入后台然后返回它,所有工作都很棒。 片段A - &gt;片段B:背压=&gt;片段A:后退=&gt;申请结束。
但是如果应用程序处于后台并且Android操作系统将其杀死以释放内存,则会出现问题:
片段A - &gt;片段B:背压=&gt;片段A是片段B(B在屏幕上始终可见):后退=&gt;片段A(B不可见):背压=&gt;申请结束。
有人有想法吗?
答案 0 :(得分:2)
您应该检查savedInstanceState
是否如此:
if(savedInstanceState == null)
{
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.add(R.id.fragmentContainer, MainMapFragment.newInstance(), "MainMapFragment");
transaction.commit();
}
当您将应用程序放入后台然后返回时,您正在重新创建碎片,而不是重复使用它们(如果您将应用程序放入后台,则应该执行此操作)。这是因为当您将应用程序放入后台时,碎片不会被破坏,但是当您重新启动应用程序时,它们会被重新创建。