Android - 从 Activity 向上导航到 Fragment

Android - Navigation Up from Activity to Fragment

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

我有: 1. Activity FrameLayout中带有ListFragment的(Navigation Drawer pattern): xml:

    <FrameLayout
        ...>

    </FrameLayout>

    <LinearLayout
        ...>

    </LinearLayout>

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

我如何返回(使用向上导航按钮)从 activity B 到 Activity A 并保存 ListFragment 的 UI(如果 Activity 重新创建我使用 Home Back 返回)。 顺便说一句,如果我按下 phone 上的后退按钮,activity 不会重新创建并且 returns 处于之前的状态。

要防止第一个 activity 重新创建,您可以做的一件事是在按下后退按钮时在第二个 activity 上调用 finish()

未测试,但我认为 ID 是 android.R.id.home,因此您只需在第二个 activity 中覆盖 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);
    }
}

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

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"。但我不确定是否有必要。