我有一个Tab
A,B和C.所有这些都包含一个名为Aa,Bb和Cc的ListView
。当我点击其中一个ListView
中的某个项目时,我想显示一个新活动,该活动将显示该被点击项目的信息。我已启用ActionBar
中的按钮,该按钮将我转到父Activity
。但是,当我单击该按钮时,它确实将我带到父活动,但是选择了一个完整的不同选项卡,它再次加载所有内容(列表视图的数据)。基本上它与我启动应用程序时的情况相同。
我想要的是回到最后一个状态"我父母的活动。我重写了onNavigateUp()方法。
@Override
public boolean onNavigateUp() {
onBackPressed();
return false;
}
这很有效。它返回到父活动并在我离开它的状态下显示它,也就是说,我所在的选项卡仍处于选中状态,ListView
显示我上次看到的项目。
但是,现在我想点击显示屏Activity
中的按钮时显示通知。当我点击该通知时,它应该带我到显示Activity
。
到目前为止一切顺利,但是当我点击该按钮以显示通知并点击该通知时,它再次转到显示活动。但问题是,它已经打开,当我点击navigateUpButton
时,它会将我带到我之前显示的最后一个活动,因此它再次显示活动。我必须再次单击它以显示父活动。
我希望我的问题很明确。当我点击navigateUpButton
?
修改
我在一个类似的问题中看到了一种方法,可以在清单文件中将其添加到我的活动中:
android:alwaysRetainTaskState="True"
android:launchMode="singleInstance"
它有效,我现在只能使用一个实例。当我点击它并且我仍在我的显示活动中时,它会将我带回我的父活动。 但是,当我在主屏幕中并点击该通知时,显示活动显示,然后使用navigateUpButton
我回到主屏幕,不要回到我的父母Activity
。
答案 0 :(得分:2)
将此信息保存在您的清单文件中:
<activity
android:label="@string/app_name" android:name="ChildActivity"
android:launchMode="singleTop" >
和
在onNavigateUp
@Override
public boolean onNavigateUp() {
Intent intentMain = new Intent(ChildAct.this, MainActivity.class);
startActivity(intentMain );
return false;
}
现在,只有在没有任何实例的情况下,才会创建“singleTop”活动的新实例来处理新意图。但是,如果目标任务已经在其堆栈顶部具有活动的现有实例,则该实例将接收新意图(在onNewIntent()调用中);未创建新实例
希望这有帮助。
答案 1 :(得分:1)
你可以试试这个而不是onNavigateUp()吗?
@Override
public boolean onOptionsItemSelected(MenuItem menuItem) {
switch (menuItem.getItemId()) {
case android.R.id.home:
super.onBackPressed();
return true;
}
return (super.onOptionsItemSelected(menuItem));
}
R.id.home是android定义的,而不是我添加的自定义按钮。