Общие настройки для состояния нажатой кнопки внутри 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".

Другие вопросы по тегам