Общие настройки для состояния нажатой кнопки внутри tabhost, не работающего при перезагрузке
Общие настройки внутри tabhost не работают для состояния нажатия кнопки.
Я меняю фон кнопки в нажатом состоянии. Но при перезагрузке (выключении и включении) телефона общие настройки не сохраняют состояние.
Переменная
btn_state
в строке ниже всегда возвращается False
final boolean btn_state = prefs.getBoolean("BUTTON_STATE", isclick);
Любая помощь всегда ценится, спасибо
вот мой код
private SharedPreferences prefs;
private String prefName = "MyPref";
private SharedPreferences.Editor editor;
private static final String BUTTON_STATE = "button_selected";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
prefs = PreferenceManager
.getDefaultSharedPreferences(getApplicationContext());
final boolean btn_state = prefs.getBoolean("BUTTON_STATE", isclick);
editor = prefs.edit();
if(btn_state == false){
seatdirnbtn.setBackgroundResource(R.drawable.icon4hlt);
}
else if(btn_state == true){
seatdirnbtn.setBackgroundResource(R.drawable.icon4);
}
}
@Override
public void onStop() {
super.onStop();
prefs = PreferenceManager
.getDefaultSharedPreferences(getApplicationContext());
editor = prefs.edit();
editor.putBoolean("BUTTON_STATE", isclick);
editor.commit();
}
public static boolean isclick = false;
private View.OnClickListener listner1 = new View.OnClickListener() {
public void onClick(View v) {
if (isclick) {
seatdirnbtn.setBackgroundResource(R.drawable.icon4hlt);
isclick = true;
prefs = PreferenceManager
.getDefaultSharedPreferences(getApplicationContext());
editor = prefs.edit();
editor.putBoolean("BUTTON_STATE", isclick);
editor.commit();
} else {
seatdirnbtn.setBackgroundResource(R.drawable.icon4);
isclick = false;
}
isclick = !isclick;
}
РЕДАКТИРОВАТЬ
private boolean isclick ;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState == null) { isclick = false; }
prefs = this.getSharedPreferences(prefName, MODE_PRIVATE);
isclick = prefs.getBoolean("prefName", false);
System.out.println("bool? " + isclick);
if (isclick) {
seatdirnbtn.setBackgroundResource(R.drawable.icon4hlt);
} else if (!isclick) {
seatdirnbtn.setBackgroundResource(R.drawable.icon4);
}
}
@Override
public void onRestart() {
super.onRestart();
if (isclick) {
seatdirnbtn.setBackgroundResource(R.drawable.icon4);
} else if (!isclick) {
seatdirnbtn.setBackgroundResource(R.drawable.icon4hlt);
}
}
@Override
public void onStop() {
super.onStop();
prefs = this.getSharedPreferences(prefName, MODE_PRIVATE);
editor = prefs.edit();
editor.putBoolean("prefName", true);
editor.commit();
}
private View.OnClickListener listner1 = new View.OnClickListener() {
public void onClick(View v) {
if (isclick) {
seatdirnbtn.setBackgroundResource(R.drawable.icon4hlt);
editor = prefs.edit();
editor.clear();
editor.putBoolean("prefName", true);
editor.commit();
} else if (!isclick) {
seatdirnbtn.setBackgroundResource(R.drawable.icon4);
editor = prefs.edit();
editor.clear();
editor.putBoolean("prefName", false);
editor.commit();
}
isclick = !isclick;
}
};
1 ответ
Я бы использовал getSharedPreferences() вместо getDefaultSharedPreferences(). В соответствии с несколькими вопросами, которые я видел в Stackru, например, этот, могут возникнуть проблемы с методом предпочтений по умолчанию.
Вы можете указать файлы предпочтений более явно с помощью getSharedPreferences(), которая может помочь вам решить эту проблему. Ознакомьтесь с руководством по общедоступным настройкам Android Developer для примеров кода и пояснений, которые могут вам помочь, если вы хотите попробовать его.
Есть несколько вещей, которые я не понимаю в коде, который вы перечислили. У вас есть 2 логические переменные, onclick и btn_state. Почему бы просто не использовать один? btn_state объявлено как окончательное. Зачем? Вы объявили строку BUTTON_STATE, но вы не используете ее в ссылках на свои префы, вы используете строку "BUTTON_STATE".