我正在尝试在应用关闭后加载上次打开的活动。以下代码就是这样做的。现在我尝试重置按钮单击,以便清除sharedpref文件并返回mainactivity。但是clear()方法只清除从mainactivity传递的值,并且不清除首选项文件中的lastactivity键值。因此,当单击重置按钮时,应用程序会冻结白屏。要删除()单个最后一个活动关键价值,但没有奏效。还尝试了apply(),而不是使用commit()。我做错了。
编辑:我删除了finish()
方法并将intent
传递给mainactivity
课程。现在重置时,单击白屏冻结消失并加载mainactivity
。但仍然没有从首选项文件中删除lastactivity
值。现在,在强制关闭和打开应用后,它会将secondactivity
加载defaultName
作为值,而不是加载mainactivity
。
SecondActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
TextView textView1 = (TextView) findViewById(R.id.textView1);
textView1.setText("Spinner 1");
TextView textView2 = (TextView) findViewById(R.id.textView2);
textView2.setText("Spinner 2");
SharedPreferences prefs = getSharedPreferences(Dispatcher.PREFS_NAME, MODE_PRIVATE);
spinnerValue = prefs.getString("spinnerValue", "defaultName");
spinnerValue2 = prefs.getString("spinnerValue2", "defaultName");
TextView textView5 = (TextView) findViewById(R.id.textView5);
textView5.setText(spinnerValue);
TextView textView6 = (TextView) findViewById(R.id.textView6);
textView6.setText(spinnerValue2);
Button resetButton = (Button) findViewById(R.id.end);
resetButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
clear();
}
});
}
@Override
protected void onPause() {
super.onPause();
SharedPreferences prefs = getSharedPreferences(Dispatcher.PREFS_NAME, MODE_PRIVATE);
Editor editor = prefs.edit();
editor.putString("lastActivity", getClass().getName());
editor.commit();
}
public void clear(){
SharedPreferences prefs = getSharedPreferences(Dispatcher.PREFS_NAME, MODE_PRIVATE);
Editor editor = prefs.edit();
//editor.remove("lastActivity");
//editor.commit();
editor.clear();
editor.commit();
}
}
更新
boolean donotexecutecode = true;
@Override
public void onClick(View view) {
donotexecutecode = false;
clear();
finish();
}
@Override
protected void onPause() {
super.onPause();
SharedPreferences prefs = getSharedPreferences(Dispatcher.PREFS_NAME, MODE_PRIVATE);
if (donotexecutecode) {
Editor editor = prefs.edit();
editor.putString("lastActivity", getClass().getName());
editor.commit();
}
return;
}
public void clear(){
SharedPreferences prefs = getSharedPreferences(Dispatcher.PREFS_NAME, MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.clear();
editor.commit();
}
答案 0 :(得分:0)
尝试使用SharedPreferences.Editor而不是仅编辑。
答案 1 :(得分:0)
显然onPause()
之后会调用clear();
。所以你总是把那把钥匙。如果要强制finish()
,则应使用布尔标志来不执行onPause中的代码。