【发布时间】:2016-04-08 22:08:00
【问题描述】:
当我导航到另一个活动并返回时,我试图保留我的 HashMap 值。这是我现在拥有的代码。
HashMap 工作并且能够从视图中的 EditText 抓取和保存数据。
但是,一旦我离开活动并返回,HashMap 就会重新初始化为空 -> {}
我查看了文档,看来这是确保变量数据持久化的正确方法。但是它不起作用。
请告诉我可能是什么问题:
public class ScriptActivity extends MainActivity {
HashMap timeAndMessages;
EditText message;
EditText time;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_script);
if (savedInstanceState != null) {
timeAndMessages = (HashMap) savedInstanceState.getSerializable("alerts");
} else {
timeAndMessages = new HashMap();
}
message = (EditText)findViewById(R.id.messageText);
time = (EditText)findViewById(R.id.timeText);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
restore(savedInstanceState);
}
private void restore(Bundle savedInstanceState) {
if (savedInstanceState != null) {
timeAndMessages = (HashMap) savedInstanceState.getSerializable("alerts");
}
}
public void createMessage (View view){
String stringmessage = message.getText().toString();
int inttime = Integer.parseInt(time.getText().toString());
timeAndMessages.put(inttime, stringmessage);
Toast.makeText(getApplicationContext(), "Will display : " + stringmessage + " At time : " + Integer.toString(inttime) , Toast.LENGTH_LONG).show();
}
@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
super.onSaveInstanceState(outState, outPersistentState);
outState.putSerializable("alerts", timeAndMessages);
}
}
【问题讨论】:
-
首先,我们看不到您的
restore()方法。其次,您的onSaveInstanceState()方法将仅用于 API 级别 21+ 设备。如果您的minSdkVersion低于 21,您可能想要只使用Bundle的onSaveInstanceState()版本。第三,这些实例状态不是针对任意场景,而是针对特定场景(例如,配置更改)。请编辑您的问题并解释“导航进出活动”的含义。 -
能否请您发布“timeAndMessages”声明和初始化代码?如果它是用户定义对象的集合,那么也请发布该 POJO。
-
@CommonsWare 我的 API 级别为 23。outPersistentState 的添加/删除似乎不会影响代码
-
@ShadabAnsari 我发布了活动的完整代码。如果您有并回答,请告诉我!
-
导航到另一个活动而不完成它并返回它不会重新开始您以前的活动。所以你不会得到你保存的状态。
标签: java android hashmap persistence instance