2016-10-05 29 views
0

アプリケーションを終了した後に最後のオープンアクティビティをロードしようとしています。以下のコードはそれを行います。今私はボタンをクリックしてリセットするようにして、それはsharedprefファイルをクリアし、mainactivityに戻ります。しかし、clear()メソッドはmainactivityから渡された値だけを消去し、設定ファイルのlastactivityキー値をクリアしません。リセットボタンをクリックすると、アプリは白い画面でフリーズします。個々のlastactivityキー値だけでは機能しませんでした。また、commit()を使用する代わりにapply()を試してみました。Sharedpreferencesは部分的にしか消去されません

編集:finish()メソッドを削除し、intentmainactivityクラスに渡しました。リセットをクリックすると、白い画面がフリーズし、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(); 
    } 
+0

削除の問題は何ですか?完璧に私のために働いています。 –

+0

クリックすると、2番目のアクティビティが閉じて白い画面が表示され、フリーズします – user3844782

+1

シーケンスを変更してみます:finish(); clear();クリアする。 finish(); –

答えて

0

明らかにonPause()clear();の後に呼び出されます。だからあなたはいつもその鍵を置く。 finish()を強制するには、ブール値フラグを使用してonPauseのコードを実行しないでください。

0

ではなく、唯一のエディタのSharedPreferences.Editorを試してみてください。

+0

うんうんだけど、うまくいきませんでした – user3844782

+0

_SharedPreferences.Editor_ – Piyush

関連する問題