当我导航到另一个活动并返回时,我正在尝试保留我的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);
}
}
答案 0 :(得分:0)
然而,只要我离开活动并返回,HashMap就会重新初始化为空 - > {}
如果通过“离开活动并返回”,则表示按下“返回”按钮,然后执行某些操作以启动新活动...然后您的行为将被预期。
保存的实例状态的Bundle
用于两个主要方案:
按BACK以销毁活动既不是那些。因此,国家没有得救。
如果此HashMap
表示模型数据 - 无论用户如何使用您的应用程序,您希望能够一次又一次地返回的数据类型 - 将其保存到数据库中{{ 1}},其他类型的文件或“云”。
您可以在the Activity
documentation中了解有关这些方案的更多信息。