Android 保存Edittext中的最新文本,并在onDestroy后还原
对于我的quote creator应用程序,如果用户在应用程序中写入了文本,并且意外地关闭了应用程序并再次启动,则所有文本都将消失。当然,我想防止这种情况发生,我尝试了一种常见的解决方案,但没有成功: 这就是我到目前为止所做的。我删除了不相关的代码Android 保存Edittext中的最新文本,并在onDestroy后还原,android,android-edittext,state,Android,Android Edittext,State,对于我的quote creator应用程序,如果用户在应用程序中写入了文本,并且意外地关闭了应用程序并再次启动,则所有文本都将消失。当然,我想防止这种情况发生,我尝试了一种常见的解决方案,但没有成功: 这就是我到目前为止所做的。我删除了不相关的代码 public static EditText mEditText; private String savedText; private static final String SAVED_TEXT_KEY = ""; @Override publi
public static EditText mEditText;
private String savedText;
private static final String SAVED_TEXT_KEY = "";
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString(SAVED_TEXT_KEY, mEditText.getText().toString());
savedText = SAVED_TEXT_KEY;
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
mEditText.setText(SAVED_TEXT_KEY);
String myString = savedInstanceState.getString(SAVED_TEXT_KEY);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mEditText = (EditText) findViewById(R.id.edittext);
mEditText.setTypeface(Style.getTypeface(this, Style.SERIF));
savedText = mEditText.getText().toString();
mEditText.setText(SAVED_TEXT_KEY);
if(savedInstanceState !=null){
savedText = savedInstanceState.getString(SAVED_TEXT_KEY);
}
}
如果我没有错,那么您就不会再次在textview上设置文本
@Override
public void onSaveInstanceState(Bundle outState) {
outState.putString(SAVED_TEXT_KEY, mEditText.getText().toString());
super.onSaveInstanceState(outState);
}
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
mEditText.setText(savedInstanceState.getString(SAVED_TEXT_KEY));
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mEditText = (EditText) findViewById(R.id.edittext);
mEditText.setTypeface(Style.getTypeface(this, Style.SERIF));
if (savedInstanceState != null) {
mEditText.setText(savedInstanceState.getString(SAVED_TEXT_KEY));
}
}
这应该可以解决问题。首先,您应该为保存的\u key\u文本提供正确的键,而不是空字符串
private static final String SAVED_TEXT_KEY = "some_key";
然后,您应该将onCreate更新为:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mEditText = (EditText) findViewById(R.id.edittext);
mEditText.setTypeface(Style.getTypeface(this, Style.SERIF));
if(savedInstanceState !=null){
mEditText.setText(savedInstanceState.getString(SAVED_TEXT_KEY));
}
}
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
mEditText.setText(savedInstanceState.getString(SAVED_TEXT_KEY));
}
public void onSaveInstanceState(Bundle outState) {
outState.putString(SAVED_TEXT_KEY, mEditText.getText().toString());
super.onSaveInstanceState(outState);
}
将您的onRestoreInstanceState设置为:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mEditText = (EditText) findViewById(R.id.edittext);
mEditText.setTypeface(Style.getTypeface(this, Style.SERIF));
if(savedInstanceState !=null){
mEditText.setText(savedInstanceState.getString(SAVED_TEXT_KEY));
}
}
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
mEditText.setText(savedInstanceState.getString(SAVED_TEXT_KEY));
}
public void onSaveInstanceState(Bundle outState) {
outState.putString(SAVED_TEXT_KEY, mEditText.getText().toString());
super.onSaveInstanceState(outState);
}
最后,您的onSaveInstanceState将:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mEditText = (EditText) findViewById(R.id.edittext);
mEditText.setTypeface(Style.getTypeface(this, Style.SERIF));
if(savedInstanceState !=null){
mEditText.setText(savedInstanceState.getString(SAVED_TEXT_KEY));
}
}
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
mEditText.setText(savedInstanceState.getString(SAVED_TEXT_KEY));
}
public void onSaveInstanceState(Bundle outState) {
outState.putString(SAVED_TEXT_KEY, mEditText.getText().toString());
super.onSaveInstanceState(outState);
}
试试这个:
通过覆盖以下内容保存您的状态:
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString(KEY, mEditText.getText().toString());
}
并恢复它:
public void onCreate(Bundle savedInstanceState) {
if(savedInstanceState != null)
{
mEditText.setText(savedInstanceState.getString(KEY));
}
}
使用IcePick库:
@状态字符串用户名;//这将自动保存和恢复似乎我对此问题的处理方法错误。按照建议,我使用SharedReferences保存当前文本
public static final String LAST_TEXT = "";
final SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
mEditText.setText(pref.getString(LAST_TEXT, ""));
mEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
pref.edit().putString(LAST_TEXT, s.toString()).commit();
}
});
你试过在
onPause()
/onDestroy()
和onResume()
中这样做吗?@Jiyeh是的,我试过将Edittext中的当前文本保存在变量savedText in onDestroy和onPause中,但我写了一些东西并关闭应用程序时,文本未保存。我已找到解决方案并回答了我提出的问题,但当我编写内容并关闭应用程序时,文本未保存。当然,关闭应用程序会导致应用程序丢失其数据。尝试将数据保存在SharedReferences中并从首选项还原。好的。所以这些解决方案的人发布了她的帖子,在应用程序关闭后没有保存任何内容吗?正确。它仅在应用程序暂停或发生方向更改时保存和恢复。我的解决方案也只适用于这些情况。尝试将其保存在首选项中。谢谢提示。我使用了SharedReferences,它起作用了!我会发布答案,现在我是由其他人提出的,但它并没有说“关闭”是指杀死应用程序吗?你可能想考虑将数据存储在SharedPref DB代码>毁灭()/<代码>中,并恢复它<代码> OnCeCuto()。我按照其他人的建议做了这个,但没有work@Muddz您应该将数据存储在SharedPref中,然后为像我这样的复制粘贴者恢复数据,使LAST_TEXT=“”代码>使您的密钥“”
。因此,如果您有多个EditText,您应该这样设置键:LAST\u TEXT\u KEY1=“mEditText1”;LAST_TEXT_KEY2=“mEditText2”代码>。