2015-06-23 2 views
3

Это мое меню настроек, это серия из 9 кнопок изображения, которые должны менять изображение в зависимости от предпочтений. Когда нажата кнопка изображения, она должна изменить логическое значение предпочтения, чтобы другое действие могло действовать соответствующим образом.SharedPreferences Редактирование Сохранение

В настоящее время он заполняет кнопки изображения на основе значений по умолчанию, но изменения, внесенные в меню настроек, по-видимому, не постоянны.

public class SettingsActivity extends PreferenceActivity { 
    ImageButton[] level = new ImageButton[9]; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_settings); 
     PreferenceManager.getDefaultSharedPreferences(this).edit().clear().commit(); 
     PreferenceManager.setDefaultValues(this, R.xml.preferences, true); 

     level[0] = (ImageButton) findViewById(R.id.imageButton); 
     level[1] = (ImageButton) findViewById(R.id.imageButton2); 
     level[2] = (ImageButton) findViewById(R.id.imageButton3); 
     level[3] = (ImageButton) findViewById(R.id.imageButton4); 
     level[4] = (ImageButton) findViewById(R.id.imageButton5); 
     level[5] = (ImageButton) findViewById(R.id.imageButton6); 
     level[6] = (ImageButton) findViewById(R.id.imageButton7); 
     level[7] = (ImageButton) findViewById(R.id.imageButton8); 
     level[8] = (ImageButton) findViewById(R.id.imageButton9); 

     PopulateButtons(); 

    } 

      public void PopulateButtons(){ 
       SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); 
       for (int i = 0; i < 9; i++) { 
        String prefKey = String.format("lev%s", i); 
        System.out.println(prefKey); 
        if (preferences.getBoolean(prefKey, false) == true) { 
         level[i].setBackgroundResource(R.mipmap.settings_verbs); 
         level[i].setOnClickListener(mySettingsHandler); 
        } else { 
         level[i].setBackgroundResource(R.mipmap.ic_launcher); 
         level[i].setOnClickListener(mySettingsHandler); 
        } 

       } 
      } 


     View.OnClickListener mySettingsHandler = new View.OnClickListener() { 
      public void onClick(View v) { 
       Context context = getApplicationContext(); 
       SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); 
       System.out.println("Running populate method"); 
       for (int i = 0; i < 9; i++) { 
        if (v.getId() == level[i].getId()) { 
         String prefKey = String.format("lev%s", i); 
         if (preferences.getBoolean(prefKey, false) == false) { 
          System.out.println("Yep"); 
          SharedPreferences.Editor editor = preferences.edit(); 
          editor.putBoolean(prefKey, true); 
          editor.commit(); 
          level[i].setBackgroundResource(R.mipmap.settings_verbs); 
         } else { 
          System.out.println("nope"); 
          SharedPreferences.Editor editor = preferences.edit(); 
          editor.putBoolean(prefKey, false); 
          editor.commit(); 
          level[i].setBackgroundResource(R.mipmap.ic_launcher); 
         } 
        } 
       } 
      } 
     }; 

} 
+0

'если (preferences.getBoolean (prefKey, ложь) == ложь)' изменение, если 'если (preferences.getBoolean (prefKey, ложь!))' Это не решение, просто он выглядит лучше:) –

+5

Вы очищаете сохраненные настройки каждый раз в своем методе 'onCreate()' и снова устанавливаете их по умолчанию. Таким образом, он не сохраняет новые предпочтения всякий раз, когда активность снова воссоздается. –

ответ

0

Вы устанавливаете значения по умолчанию каждый раз, когда вызывается вызов onCreate. Попробуйте

if (savedInstanceState == null) { 
    PreferenceManager.getDefaultSharedPreferences(this).edit().clear().commit(); 
    PreferenceManager.setDefaultValues(this, R.xml.preferences, true); 
}