Android回到旧活动

时间:2014-06-30 09:49:23

标签: java android android-listview android-notifications

我有一个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

2 个答案:

答案 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()调用中);未创建新实例

Refer here

希望这有帮助。

答案 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定义的,而不是我添加的自定义按钮。