在Android中将数据从活动A传递到活动D.

时间:2013-02-02 23:39:53

标签: android android-edittext save

这是我的问题:

活动A具有EditText。我需要保存用户在此EditText中的输入,以便在Activity D,活动层次结构中的3个活动中将其拉出,然后将其放入我在那里设置的TextView中。我尝试了几种方法,但都没有。我遇到的例子实现了某些方法,比如意图中的Bundles,它们将数据推送到层次结构中的下一个Activity。我相信这些方法对我来说没有用,因为我不得不将数据推送到层次结构下方的Activity。有什么建议吗?

4 个答案:

答案 0 :(得分:0)

最简单的方法是使用可从应用程序的每个活动或服务访问的SharedPreferences。

您正在尝试传输简单数据,因此放入键值对非常简单。

要将数据保存到Sharedprefs,只需键入保存用户数据的Activity

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor = prefs.edit();

editor.putString("key", "value");
editor.commit();

在想要检索数据的活动中,请使用:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
String userValue =  prefs.getString("key", "ValueIfKeyDoesNotExist");

当然还有更多关于SharedPreferences的内容 - 最好的来源是官方来源SharedPreferences

您也可以尝试使用像SQLite这样的数据库,但在您的情况下,应该存储的数据非常简单,因此不会注意到DB的任何优点。 通过Intent.putExtra()通过许多活动传递数据也不是很有用

答案 1 :(得分:0)

如果只是文本(EditText),您想稍后将其拉到TextView。我将研究如何设置SQLite Database类以将文本保存在数据库中,然后将文本拉到任何Activity中的TextView。以下是有关设置的良好链接:SQLite for Android

答案 2 :(得分:0)

如果您想要进入Bundle路由,您可以通过您的活动层次结构不断传递相同的Bundle,或者将数据从一个Bundle存储到下一个Bundle中。您也可以使用SharedPreferences。这取决于在应用程序被杀死时是否需要保留数据。

答案 3 :(得分:0)

我建议数据库是个不错的主意。但是,如果它过度,则可能会考虑自定义Application对象中的静态变量(可能甚至是列表或映射)。将android:name =“。MyApplication”属性添加到清单中的application元素,然后创建一个扩展Application的新类MyApplication。完成后,活动A可以调用:

((MyApplication) getApplication()).setUserText(editText.getText().toString())

...活动D可以致电:

editText.setText(((MyApplication) getApplication()).getUserText()).

你必须弄清楚消息传递协议的语法:如果D在A之前启动会发生什么,依此类推,但这会将字符串从一个地方带到另一个地方。