アプリケーションを終了した後に最後のオープンアクティビティをロードしようとしています。以下のコードはそれを行います。今私はボタンをクリックしてリセットするようにして、それはsharedprefファイルをクリアし、mainactivityに戻ります。しかし、clear()メソッドはmainactivityから渡された値だけを消去し、設定ファイルのlastactivityキー値をクリアしません。リセットボタンをクリックすると、アプリは白い画面でフリーズします。個々のlastactivityキー値だけでは機能しませんでした。また、commit()を使用する代わりにapply()を試してみました。Sharedpreferencesは部分的にしか消去されません
編集:finish()
メソッドを削除し、intent
をmainactivity
クラスに渡しました。リセットをクリックすると、白い画面がフリーズし、mainactivity
がロードされます。しかし、まだlastactivity
の値は環境設定ファイルから削除されません。強制終了後、アプリを起動すると、がとロードされ、値は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();
}
削除の問題は何ですか?完璧に私のために働いています。 –
クリックすると、2番目のアクティビティが閉じて白い画面が表示され、フリーズします – user3844782
シーケンスを変更してみます:finish(); clear();クリアする。 finish(); –