关于将数据传递到另一个活动,我几乎没有问题。假设我有三个活动,我称之为
第一项活动
第二项活动
第三项活动
当用户启用应用程序时,该用户处于第一个活动中。要从第一个活动转到第三个活动,用户还必须完成第二个活动。工作流程
第一项活动(用户按钮) - > 第二项活动(用户按钮) - > 第三项活动
假设我需要第三个活动中第一个活动的数据,所以我需要将我的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");
}
感谢您的回答,问候。
答案 0 :(得分:0)
您可以使用放置在Application
类实例中的变量。此变量对应用程序的所有活动和其他元素共享。
答案 1 :(得分:0)
您有几种选择。首先,你在评论中说你只需要一个元素。在这种情况下,您可以在Intent
中将一个元素作为“额外”传递,而不是传递整个HashMap
。
其次,我不明白为什么你通过调用Activity
从第三个Activity
返回到第二个startActivity()
。您只需致电finish()
,即可返回第二个Activity
。
如果您需要将第三个Activity
中的某些数据返回到第二个Activity
,则应使用Activity
启动第三个startActivityForResult()
并将数据设置为第三个Activity
使用setResult()
,数据将返回Activity
中的第二个onActivityResult()
。
另一种选择是完全按照您的操作完成,但每次拨打hashMap
时,也会将Intent
复制到startActivity()
作为“额外”。如果您在hashMap
中只有一小撮条目,则不会在性能方面产生任何明显的差异。