【发布时间】:2013-08-30 14:28:45
【问题描述】:
我的应用中有 5 个活动。每个活动都有一些数据。我需要上一个活动中的所有以前的活动数据。之前所有的Activity都是一种Form。用户填写数据并移动到下一个活动,最后一个活动显示所有以前活动的数据。
【问题讨论】:
-
你可以使用像Application这样的静态单例类
-
对于单例 globalData 类绝对 +1。迄今为止最简单的方法
我的应用中有 5 个活动。每个活动都有一些数据。我需要上一个活动中的所有以前的活动数据。之前所有的Activity都是一种Form。用户填写数据并移动到下一个活动,最后一个活动显示所有以前活动的数据。
【问题讨论】:
有几种方法可以做到这一点。
使用 Intent 并保存数据,如 putString(...):
这不是很好,因为您必须临时保存 Activity 中每个 Intent 的数据,并使用下一个 Intent 进一步移动它们。
为您的数据使用一个类并将其通过每个意图的活动:
通过这种方式,您可以将类的实例传递给活动以写入/读取您的数据。但是这个类需要 Parcelable / Serializable 接口
使用静态类:
您可以在每个 Activity 中访问此类,并按您的意愿进行读写。
使用带有 Intent 的捆绑包:
将所有数据保存在一个 Bundle 中并将其传递给活动。
想想你的设计和使用片段:
进行一项包含 5 个片段的活动。每个 Fragment 都保存/读取 Activity 中的数据。
最好的方法是使用 Bundle。
【讨论】:
选项 1:
如果您想为每个活动添加数据并将其结转到下一个活动,那么最好使用bundle 传递数据。
在数据相对较小并且您只想将数据传递给下一个活动并且不想为将来存储数据的情况下,捆绑包更好。
选项 2:
您可以使用Sharedprefrences。更好地用于存储数据以备将来使用。
选项 3:
如果您有更多记录并且您希望它以结构化方式存储并以备将来使用,那么Sqlitedatabase 是显而易见的。
如果您想非常频繁地使用您的数据并且它不是结构化的,那么以上选项是为了防止。
【讨论】:
您可以使用Intent
第一个活动
Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
intent.putExtra("key_value", string);
startActivity(intent);
第二个活动
String text = getIntent().getStringExtra("key_value");
或者如果你需要数据保持更长时间,并且在应用被杀死后可以重复使用,你可以使用SharedPrefrences
将数据放入一些Activity
SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit();
editor.putString("ValueOne", "SomeValue" );
editor.commit();
从任何Activity 中的共享偏好中检索数据
SharedPreferences prefs = getPreferences(MODE_PRIVATE);
String prefString = prefs.getString("ValueOne", null);
【讨论】: