即使我在后退按钮上调用FINISH,Android也恢复了我的活动

时间:2011-12-15 19:22:32

标签: android android-activity

我有一个用Intent启动B的活动A. (B是MapActivity并且有一些异步代码)

B中的

我有以下代码

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    // TODO Auto-generated method stub
 if ((keyCode == KeyEvent.KEYCODE_BACK)) {
//          Log.d(this.getClass().getName(), "back button pressed");

     finish();
     return true;
    }

    return super.onKeyDown(keyCode, event);
}

这根本行不通。我的意思是当我按下手机上的后退按钮时,当前活动B消失,并显示启动B的活动A.

如果我再次按A启动B的按钮,我看到B就是我关闭时的确切方式。文本框中的相同文本,相同的地图位置......所以我认为活动B并未真正关闭。

我怎样才能真正关闭它呢?当我再次发布它时,活动B是新生的清除?

编辑:只是为了让问题更加清晰: 我希望它能像这样工作:当用户处于活动B并按下BACK按钮时,B必须被关闭并销毁。当用户再次从A启动B时,B必须作为新活动启动,具有空白字段,重置地图等等,......就像用户第一次从A启动B一样。

4 个答案:

答案 0 :(得分:0)

尝试在finish()之后返回super.onKeyDown(keyCode,event),而不是返回true。 您可以尝试另外一件事:在该活动的清单中指定android:noHistory =“true”。 指定此属性不会将活动保留在活动堆栈上。 http://developer.android.com/guide/topics/manifest/activity-element.html#nohist

答案 1 :(得分:0)

您是否尝试通过在A?

中调用startActivityForResult()来测试B.

在B中完成所有处理,然后确保在其上调用完成,这应该清除其中的所有数据。

如果有效,请告诉我。

答案 2 :(得分:0)

很明显。完成活动时会调用OnSaveState,并且此活动会从堆栈中弹出。清除这种情况的最佳做法是记录两个活动中的所有生命周期事件,这将有助于找出初始化B活动的位置。

是的,还有一件事尝试在B活动中研究NewIntent方法我认为它真的很有帮助

答案 3 :(得分:0)

正如我在帖子的最后评论中所述,@ .Jianhong给了我正确的答案(aslso如果作为评论)。由于他没有及时复制评论作为答案,我添加了这个答案并将其标记为ACCEPTED。谢谢@Jianhong!

答案: @Jianhong OMG!你完全正确!我在过去几天检查了这个问题,但我找不到它...我没有从SVN更新。我的同事插入了一些代码行,这些代码用一些静态var预填充字段!