简单导航和在活动之间传递数据

时间:2015-10-12 15:10:03

标签: android android-activity

我有3项活动。假设它们为1,2和3。

每个屏幕都包含 -

  1. 屏幕名称 - screen_1,screen_2和screen_3 resp。
  2. 从屏幕# - #是在活动中传递的screen_number。
  3. 下一步按钮 - 导航到下一个活动。

    • 导航如下 -
  4. 1→2→3 反之亦然 3→2→1

    Navigation as in picture

    • ' From_screen _#'对于屏幕1'将是空白或' 0' 0在每次发布时。
    • 当我按下Activity_1上的下一个按钮时,应该使用From_screen_#as' 1'导航到Activity_2。如果我按下Activity_2上的后退按钮,那么From_screen_#应该是' 2'在Activity_1。
    • 活动2上的类似行为。
    • 在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上为空。如何解决?

2 个答案:

答案 0 :(得分:0)

首先,如果您想在按后退按钮时覆盖默认的Android行为,则必须覆盖活动中的onBackPressedonKeyDown用于通过键盘观看事件。

恢复活动#1时没有内容,因为您的意图中没有数据(没有数据从2传递到1)。您应该调查onResume中是否有任何内容。

学习如何使用Intent将数据从上下文传递到另一个上下文是很好的。但是,正如您可能已经注意到的那样,并不是真的使用它们。传递自定义对象也很困难。

我强烈建议您使用EventBusParceler等库。

要解决您的问题,只需在暂停源活动时传递数据,然后在恢复目标活动时将其拉出。

答案 1 :(得分:0)

好吧,它无法完成!!!

  1. 发布时,Activity_1在Stack上。它启动Activity_2并将其推送到堆栈。
  2. 现在Activity_2启动Activity_3并将其推送到堆栈。
  3. 现在堆栈包含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来回传递数据。