这是我的问题:
活动A具有EditText。我需要保存用户在此EditText中的输入,以便在Activity D,活动层次结构中的3个活动中将其拉出,然后将其放入我在那里设置的TextView中。我尝试了几种方法,但都没有。我遇到的例子实现了某些方法,比如意图中的Bundles,它们将数据推送到层次结构中的下一个Activity。我相信这些方法对我来说没有用,因为我不得不将数据推送到层次结构下方的Activity。有什么建议吗?
答案 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之前启动会发生什么,依此类推,但这会将字符串从一个地方带到另一个地方。