我的应用程序中的活动1在按下“下一步”按钮时启动活动2。
如果用户点击活动2中的后退按钮,则应用程序将它们返回到活动1
如果用户随后点击“下一步”按钮,应用程序会再次将它们带到活动2,但在活动2中输入的任何内容现在都是空白的。有没有办法保持活动2中的数据字段不变?
答案 0 :(得分:1)
是的,您可以保存数据使用共享首选项,这是保存和检索数据的最佳机制之一。即由用户输入。
共享偏好
您可以使用以下机制保存数据
SharedPreferences.Editor editor = mySharedPreferences.edit();
// Store new primitive types in the shared preferences object.
editor.putBoolean("isTrue", true);
editor.putFloat("lastFloat", 1f);
editor.putInt("wholeNumber", 2);
editor.putLong("aNumber", 3l);
editor.putString("textEntryValue", "Not Empty");
// Commit the changes.
editor.commit();
稍后您可以使用以下程序检索
public void loadPreferences() {
// Get the stored preferences
int mode = Activity.MODE_PRIVATE;
SharedPreferences mySharedPreferences = getSharedPreferences(MY_PREFS, mode);
// Retrieve the saved values.
boolean isTrue = mySharedPreferences.getBoolean("isTrue", false);
float lastFloat = mySharedPreferences.getFloat("lastFloat", 0f);
int wholeNumber = mySharedPreferences.getInt("wholeNumber", 1);
long aNumber = mySharedPreferences.getLong("aNumber", 0);
String stringPreference = mySharedPreferences.getString("textEntryValue", "");
}
但是应根据您的要求在正确的活动生命周期方法中添加上述代码
即onCreate(),onRestore()等
答案 1 :(得分:0)
当你从Activity1(A1)转到Activity2(A2)时,两者都存储在堆栈中,顶部是A2。 如果您使用后退按钮A2将弹出,您再次获得A1的状态。照顾一样。避免使用后退按钮。
使用OnResume方法临时存储变量。它将帮助您管理这些状态。
答案 2 :(得分:0)
如果您使用startactivity
开始活动,则除非您更改launchMode
,否则它将始终创建新的活动实例。为了不创建多个实例,您应该使用launchMode将活动设置为singleTask
或singleTask
,
请参考android:launchMode选择最符合您要求的套装
答案 3 :(得分:0)
嗯......如果你只关心在后退按钮上保存视图状态,你可以使用偏好(比如在onStop中)作为Ramesh状态。但是没有理由在每次调用onStop时保存首选项,只有在硬杀死时。您可以通过在onResume中将标志isCalledSavedInstanceState设置为false来实现此目的,而不是在onCreate中。然后在onSavedInstanceState中将此标志设置为true。然后使用此标志写入prefs,如果onStop中有!isCalledSavedInstanceState。这里的逻辑是onSavedInstanceState不是在硬杀死上调用的,如果在软杀死时调用它,它在onStop之前被调用。
编辑:如果活动具有“共享文档类数据”,那么您应该在onPause()中将状态保存到数据库。
JAL
答案 4 :(得分:0)
根据您尝试执行的操作和代码,您可以将变量设置为静态。请注意,因为这个存在陷阱