我有一个用Intent启动B的活动A. (B是MapActivity
并且有一些异步代码)
我有以下代码
@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一样。
答案 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预填充字段!