活动之间的适当数据传输

时间:2017-08-12 19:07:30

标签: android android-intent android-activity

关于将数据传递到另一个活动,我几乎没有问题。假设我有三个活动,我称之为

第一项活动

第二项活动

第三项活动

当用户启用应用程序时,该用户处于第一个活动中。要从第一个活动转到第三个活动,用户还必须完成第二个活动。工作流程

第一项活动(用户按钮) - > 第二项活动(用户按钮) - > 第三项活动

假设我需要第三个活动中第一个活动的数据,所以我需要将我的HashMap与我的数据从第一个活动传递到第二个活动然后传递到第三个活动?有没有办法直接传递数据从第一个活动到第三个活动,但就像我说的那样,用户还必须通过第二个活动。

我是这样做的......

Intent secondActivity = new Intent(this, secondActivity.class);
secondActivity.putExtra("myHashMap", dataHashMap);
this.startActivity(secondActivity);

然后在第二个活动中我有这部分代码

    secondActivity = getIntent();
    dataHashMap = (HashMap<String, 
    String>)secondActivity.getSerializableExtra("myHashMap");

然后我重复第三个活动的上面两个步骤。这是正确的方法吗?因为看起来有点混乱和耗时。还有另外一个问题,现在如果我在第三个活动中,并且我想回到第二个或第一个活动,我总是传递一些HashMap,因为活动需要这种类型的数据。有没有办法有时返回到以前的活动但不再传递任何数据(在我的情况下是HashMap)如果不需要?

secondActivity.putExtra("myHashMap", dataHashMap); //- I would like to sometimes skip this step

我尝试使用下面的代码处理此问题,但它不起作用,我的应用程序一直停止/崩溃,因为第二个活动需要第三个活动的hashMap数据。

secondActivity = getIntent();
if(secondActivity != null){
     dataHashMap = (HashMap<String, 
     String>)secondActivity.getSerializableExtra("myHashMap");
}

感谢您的回答,问候。

2 个答案:

答案 0 :(得分:0)

您可以使用放置在Application类实例中的变量。此变量对应用程序的所有活动和其他元素共享。

答案 1 :(得分:0)

您有几种选择。首先,你在评论中说你只需要一个元素。在这种情况下,您可以在Intent中将一个元素作为“额外”传递,而不是传递整个HashMap

其次,我不明白为什么你通过调用Activity从第三个Activity返回到第二个startActivity()。您只需致电finish(),即可返回第二个Activity

如果您需要将第三个Activity中的某些数据返回到第二个Activity,则应使用Activity启动第三个startActivityForResult()并将数据设置为第三个Activity使用setResult(),数据将返回Activity中的第二个onActivityResult()

另一种选择是完全按照您的操作完成,但每次拨打hashMap时,也会将Intent复制到startActivity()作为“额外”。如果您在hashMap中只有一小撮条目,则不会在性能方面产生任何明显的差异。