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>
- 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"
。但我不确定是否有必要。
我正在开发一些应用程序,但遇到了一个问题。
我有: 1. Activity FrameLayout中带有ListFragment的(Navigation Drawer pattern): xml:
<FrameLayout
...>
</FrameLayout>
<LinearLayout
...>
</LinearLayout>
</android.support.v4.widget.DrawerLayout>
- 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"
。但我不确定是否有必要。