2016-05-25 4 views
0

私はDefaultSharedPrefenecesを使用してナビゲーション・ドロワーのチェック・ボックスの状態をロードします。getDefaultSharedPreferenecesは、複数のブール値を設定するときにすべてのブール値に対してfalseを返します。

ナビゲーションドロワーが作成され、チェックボックスの状態がDefaultPreferencesからロードされている場合、各チェックボックスのブール値がtrueの場合、チェックボックスはチェックされます。

ユーザーがチェックボックスをクリックすると、状態がdefaultsharedPrefencesに保存されます。 私はこのすべてに問題はありません。

問題は、2つのブール値をコミットする前にdefaultsharedprefencesに入れようとすると、最初のブール値を上書きするように見えます。

は、ここで私はそれが各項目がクリックされた上で1 putBooleanのために働くことを確実に知る私のコード

//Navigation Drawer 
private void addDrawerItems() { 


    String[] osArray = {"item1", "item2", "item3"}; 

    mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice, osArray); 


    if (mIsPremiumUser) { 
     mDrawerList.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE); 
    } else { 
     mDrawerList.setChoiceMode(AbsListView.CHOICE_MODE_NONE); 
    } 

    mDrawerList.setAdapter(mAdapter); 


    Boolean isCheckedValue; 


    // *** THIS IS WHERE I LOAD THE CHECKBOX STATE FROM DEFAULTSHAREDPREFERENCES *** 
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); 
    isCheckedValue = preferences.getBoolean("cbox1", false); 
    mDrawerList.setItemChecked(0, isCheckedValue); 

    isCheckedValue = preferences.getBoolean("cbox2", true); 
    mDrawerList.setItemChecked(1, isCheckedValue); 

    isCheckedValue = preferences.getBoolean("cbox3", true); 
    mDrawerList.setItemChecked(2, isCheckedValue); 



    mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

      CheckedTextView ctv = (CheckedTextView) view; 

      if (!mIsPremiumUser) { 
       Toast.makeText(getApplication(), "Upgrade", Toast.LENGTH_LONG).show(); 
       return; 
      } 


      switch (position) { 

       case 0: 


        if (ctv.isChecked()) { 

         requestActivityUpdates(); 
         Toast.makeText(getApplicationContext(), "item1ON", Toast.LENGTH_SHORT).show(); 

         // THIS IS WHERE I SAVE THE STATE OF THE CHECKBOX IN DEFAULT SHAREDPREFENCES 
         SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
         SharedPreferences.Editor editor = preferences.edit(); 

         editor.putBoolean("cbox1", ctv.isChecked()); 
         editor.commit(); 


        } else { 

         removeActivityUpdates(); 
         Toast.makeText(getApplicationContext(), "item1OFF", Toast.LENGTH_SHORT).show(); 


         SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
         SharedPreferences.Editor editor = preferences.edit(); 

         editor.putBoolean("cbox1", false); 
         editor.commit(); 


        } 

        break; 

       case 1: 
        if (ctv.isChecked()) { 

         Toast.makeText(getApplicationContext(), "item2 ON", Toast.LENGTH_LONG).show(); 


         SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
         SharedPreferences.Editor editor = preferences.edit(); 

         // THIS IS WHERE I SAVE THE STATE OF THE CHECKBOX IN DEFAULT SHAREDPREFENCES 
         editor.putBoolean("cbox2", ctv.isChecked()); 
         editor.putBoolean("callStatus", ctv.isChecked()); // << THIS LINE IS CAUSING ME PROBLEMS 
         editor.commit(); 


        } else { 

         Toast.makeText(getApplicationContext(), "item2 OFF", Toast.LENGTH_LONG).show(); 


         SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
         SharedPreferences.Editor editor = preferences.edit(); 

         editor.putBoolean("cbox2", ctv.isChecked()); 
         editor.putBoolean("callStatus", ctv.isChecked()); 
         editor.commit(); 


        } 
        break; 

       case 2: 
        if (ctv.isChecked()) { 

         Toast.makeText(getApplicationContext(), "item3 ON", Toast.LENGTH_LONG).show(); 


         SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
         SharedPreferences.Editor editor = preferences.edit(); 

         editor.putBoolean("cbox3", ctv.isChecked()); 
         editor.putBoolean("smsStatus", ctv.isChecked()); 
         editor.commit(); 


        } else { 

         Toast.makeText(getApplicationContext(), "item3 OFF", Toast.LENGTH_LONG).show(); 


         SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
         SharedPreferences.Editor editor = preferences.edit(); 

         editor.putBoolean("cbox3", ctv.isChecked()); 
         editor.putBoolean("smsStatus", ctv.isChecked()); 
         editor.commit(); 

        } 
        break; 

      } 


     } 
    }); 
} 

ですが、私は同じ内の2つのputBooleanしたらない/他のエディタの前にあれば。コミットする。 問題の原因と解決方法についてのご意見はありますか?それは非常に高く評価されます。

答えて

0

私はそれを理解しました!ブール値として が外部のdefaultSharedPrefenencesファイル に保存されていた場合、その値は常にその値から読み取られていました。 最後にチェックボックスをクリックすると状態がプルされます。 私は、アプリを終了するたびに、私が望んでいたデフォルトの選択状態に戻ることを偽りなく真実であると考えていました。アプリがあったときにデフォルトのSharedpreferencesが破棄されなかったので、最新の状態でロードされます。

ブール値をnullに戻し、false、true、trueを表示するには、アプリケーションマネージャのアプリデータをクリアする必要がありました。

関連する問題