sar*_*unw 36 android android-intent android-actionbar
根据我从Gmail和TED应用程序观察到的向上导航的行为,它将导航到具有相同状态(滚动位置)的父级,而不像谷歌在他们的文档中所说的实施向上导航,就像创建父意图并启动它一样.
我实现了Android示例代码中的代码,所有状态都消失了(我之前设置的所有额外参数和滚动位置).这是什么方法?我在Android文档上找不到任何内容.
以下是代码:
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Intent upIntent = new Intent(this, MyParentActivity.class);
if (NavUtils.shouldUpRecreateTask(this, upIntent)) {
// This activity is not part of the application's task, so create a new task
// with a synthesized back stack.
TaskStackBuilder.from(this)
.addNextIntent(new Intent(this, MyGreatGrandParentActivity.class))
.addNextIntent(new Intent(this, MyGrandParentActivity.class))
.addNextIntent(upIntent)
.startActivities();
finish();
} else {
// This activity is part of the application's task, so simply
// navigate up to the hierarchical parent activity.
NavUtils.navigateUpTo(this, upIntent);
}
return true;
}
return super.onOptionsItemSelected(item);
Run Code Online (Sandbox Code Playgroud)
}
在我的情况下,我有3个活动,比如AB和C,当用户从A导航到BI时添加一些额外内容和onCreateBI使用额外的东西从数据库查询数据以填充我的行,当我从C导航回来时,所有额外内容都消失了B什么都没显示.
yon*_*joy 92
android活动的"标准"行为是,每次有此活动的新意图时,都会创建活动的新实例(请参阅此处的 launchMode-docu ).因此,如果你调用navigateUpTo,你的额外内容似乎已经消失了.
在你的情况下,我会建议使用
android:launchMode="singleTop"
Run Code Online (Sandbox Code Playgroud)
适用于AndroidManifest.xml中的父活动.这样您将返回到现有活动(只要它位于任务的后堆栈顶部).这样你的演员就会被保留下来.
我也是,不明白为什么在你引用的Google文档中没有提到这一点,因为这似乎是人们在使用向上导航时所期望的行为.
yon*_*joy 12
这是接受的答案的替代解决方案:
如果你不能改变launchMode你的活动,或者如果父活动是不是在后面堆栈的顶部(如A是C的父母),则不能使用该解决方案上面.在这种情况下,您必须扩展您的navigateUpTo调用以告知活动,如果它位于后台堆栈上,则不应重新创建它:
Intent intent = NavUtils.getParentActivityIntent(this);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
NavUtils.navigateUpTo(this, intent);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13017 次 |
| 最近记录: |