4

我正在开发一些应用程序,但我遇到了一个问题。

我有: 1. Activity A(导航抽屉模式)与 FrameLayout 中的 ListFragment:xml:

    <FrameLayout
        ...>

    </FrameLayout>

    <LinearLayout
        ...>

    </LinearLayout>

</android.support.v4.widget.DrawerLayout>
  1. Activity B 在 ListFragment 中显示 ListView 的详细数据。

如何通过保存 ListFragment 的 UI 从活动 B 返回(使用向上导航按钮)到活动 A(如果我使用 Home Back 返回,则重新创建活动)。顺便说一句,如果我按下手机上的后退按钮,活动不会重新创建并返回之前的状态。

4

2 回答 2

11

当您使用向上导航时,会重新创建先前的活动。为了防止在保留向上导航时发生这种情况,您可以获取父活动的意图,如果存在则将其置于最前面,否则创建它。

public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            Intent parentIntent = NavUtils.getParentActivityIntent(this);
            parentIntent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
            startActivity(parentIntent);
            finish();
            return true;
    }
    return super.onOptionsItemSelected(item);
}

我也在launchMode="singleTop"Manifest 中指定。但我不确定这是否有必要。

于 2015-05-05T17:39:53.437 回答
0

为了防止第一个活动重新创建,您可以做的一件事是finish()在按下后退按钮时调用第二个活动。

未经测试,但我相信 id 是android.R.id.home,所以您所要做的就是onOptionsItemSelected在第二个活动中覆盖,如下所示:

/**
 * Handles the selection of a MenuItem.
 */
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch(item.getItemId()){
        case android.R.id.home:
            finish();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}
于 2015-05-05T17:36:56.963 回答