Это мое меню настроек, это серия из 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);
}
}
}
}
};
}
'если (preferences.getBoolean (prefKey, ложь) == ложь)' изменение, если 'если (preferences.getBoolean (prefKey, ложь!))' Это не решение, просто он выглядит лучше:) –
Вы очищаете сохраненные настройки каждый раз в своем методе 'onCreate()' и снова устанавливаете их по умолчанию. Таким образом, он не сохраняет новые предпочтения всякий раз, когда активность снова воссоздается. –