Android - os关闭后台应用程序后片段导航问题

时间:2015-09-02 15:26:01

标签: java android android-fragments

我的片段容器:

    <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;申请结束。

有人有想法吗?

1 个答案:

答案 0 :(得分:2)

您应该检查savedInstanceState是否如此:

if(savedInstanceState == null) 
{
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    transaction.add(R.id.fragmentContainer, MainMapFragment.newInstance(), "MainMapFragment");
    transaction.commit();
}

当您将应用程序放入后台然后返回时,您正在重新创建碎片,而不是重复使用它们(如果您将应用程序放入后台,则应该执行此操作)。这是因为当您将应用程序放入后台时,碎片不会被破坏,但是当您重新启动应用程序时,它们会被重新创建。