我有3项活动。假设它们为1,2和3。
每个屏幕都包含 -
下一步按钮 - 导航到下一个活动。
1→2→3 反之亦然 3→2→1
在Activity_3 onClick下一个按钮时,它应导航到Activity_2并将From_screen_#传递给' 3'。因此,在Activity_2上,From_screen_#是' 3'。当我按下Activity_2上的后退按钮时,它应该导航到Activity_1而不是导航到活动3。
我不能像Overriding onKeyDown()那样使用硬编码导航,也不能通过Intent启动上一个Activity。
我启动了NextActivity,如下所示 -
startActivityForResult(new Intent(MainActivity.this, Two.class)
.putExtra("from", "1"), 2);
我已经覆盖onKeyDown()并将数据传递给上一个Activity,如下所示 -
if(keyCode == KeyEvent.KEYCODE_BACK){
Intent intent = new Intent();
intent.putExtra("from", "2");
setResult(2, intent);
finish();
}
我在onActivityResult()中设置From_screen_#,如下所示 -
if(data!=null)
txtFrom.setText("From" + data.getStringExtra("from"));
在第3个屏幕上,我开始了第二个活动,如下所示 -
startActivity(new Intent(Five.this, Two.class)
.putExtra("from", "3")
.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
查询 -
如果我从1-> 2导航然后从2-> 1导航我得到正确的From_screen_#= 1。
但是当我从1-> 2-> 3然后从3-> 2然后从2-> 1导航时,则数据在Activity_1上为空。如何解决?
答案 0 :(得分:0)
首先,如果您想在按后退按钮时覆盖默认的Android行为,则必须覆盖活动中的onBackPressed
。 onKeyDown
用于通过键盘观看事件。
恢复活动#1时没有内容,因为您的意图中没有数据(没有数据从2传递到1)。您应该调查onResume
中是否有任何内容。
学习如何使用Intent将数据从上下文传递到另一个上下文是很好的。但是,正如您可能已经注意到的那样,并不是真的使用它们。传递自定义对象也很困难。
要解决您的问题,只需在暂停源活动时传递数据,然后在恢复目标活动时将其拉出。
答案 1 :(得分:0)
好吧,它无法完成!!!
现在堆栈包含3个活动。我可以使用Flag" Intent.FLAG_ACTIVITY_CLEAR_TOP"从堆栈弹出Activity。这将重新创建Intented Activity。
在我的情况下,它是Activity_2,因此它从Activity_3接收数据。现在,从Activity_3重新创建了此Activity_2,因此无法通过Intent将任何数据传递给Activity_1而无需重新创建它。
我尝试在Activity_2 = singleTop上设置launch_mode,避免重新创建Activity_2。在这种情况下,数据无法从Activity_3传递到Activity_2。但是,预期数据已成功从Activity_2传递到Activity_1。
我认为我们只能通过Intent来回传递数据。