[英]Android shared preference when activity recreated
嗨,在我的应用程序中,我正在使用两个主题。 更改主题后,将重新创建活动。 此时,我无法恢复编辑文本值。
@Override
protected void onResume() {
SharedPreferences mSharedPreferences = getSharedPreferences(
Constants.PREFERENCE_FILENAME, Activity.MODE_PRIVATE);
edt_kilo.setText(mSharedPreferences.getString(Constants.KILO_VAL,""));
edt_pound.setText(mSharedPreferences.getString(Constants.POUND_VAL,""));
if ((edt_centimeter.getText().toString().length() > 0)
|| (edt_feet.getText().toString().length() > 0)
|| (edt_inches.getText().toString().length() > 0)) {
imagelayout.setVisibility(View.VISIBLE);
super.onResume();
}
}
@Override
protected void onPause() {
super.onPause();
SharedPreferences.Editor edit = mSharedPref.edit();
edit.putString(Constants.KILO_VAL, edt_kilo.getText().toString());
edit.putString(Constants.POUND_VAL,edt_pound.getText().toString());
edit.commit();
}
@Override
public void onBackPressed() {
this.finish();
}
上面的代码的问题甚至是在通过按设备的“后退”按钮完成活动之后,仍然保留了这些值,我不希望这样做。
同样,当我“清除”编辑文本中的值时,当我按下设备的“后退”按钮时,当我再次出现时,相同的值仍然存在。
如何处理这种情况
尝试这样:
public class TestActivity extends Activity{
private String etFirstValue="";
private String etSecondValue="";
private EditText etTwo,etOne;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//initaialize views here
}
/* (non-Javadoc)
* @see android.app.Activity#onRestoreInstanceState(android.os.Bundle)
*/
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
etFirstValue = savedInstanceState.getString("firstEditTextKey");
etSecondValue = savedInstanceState.getString("secondEditTextKey");
}
/* (non-Javadoc)
* @see android.app.Activity#onSaveInstanceState(android.os.Bundle)
*/
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putString("firstEditTextKey", "value");
outState.putString("secondEditTextKey", "value");
super.onSaveInstanceState(outState);
}
@Override
protected void onResume() {
super.onResume();
//set the values to edit text
etOne.setText(etFirstValue);
etTwo.setText(etFirstValue);
}
}
对于简短的解释,您可以通过此链接: 这里
这是因为您正在设置共享首选项中的值,并且在关闭和打开应用程序的活动时不会清除共享首选项。
您可以清除首选项(如果可以),或者将空值设置为onStop()中的编辑文本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.