【问题标题】:Shared preferences for button pressed state inside tabhost not working on reboottabhost 中按钮按下状态的共享首选项在重新启动时不起作用
【发布时间】:2012-12-04 11:36:03
【问题描述】:

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;
    }

};

【问题讨论】:

    标签: android button sharedpreferences save reboot


    【解决方案1】:

    我会使用 getSharedPreferences() 而不是 getDefaultSharedPreferences()。根据我在 StackOverflow 上看到的一些问题,例如 this one,默认的首选项方法可能会出现一些问题。

    您可以使用 getSharedPreferences() 更明确地指定首选项文件,这可能会帮助您解决此问题。查看 Android 开发人员Shared Preferences guide 获取代码示例和说明,如果您想尝试一下,它们应该会对您有所帮助。

    您列出的代码中有一些我不明白的地方。 您有 2 个布尔变量,onclick 和 btn_state。为什么不只使用一个? btn_state 被声明为最终状态。为什么? 您已经声明了一个 BUTTON_STATE 字符串,但您没有在引用您的首选项时使用它,您使用的是字符串“BUTTON_STATE”。

    【讨论】:

    • 感谢您的回复,我按照您说的做了,但是没有用。
    • 为什么isclick变量是静态的?您的 onClick 方法的 if 语句似乎运行得很奇怪,如果它已经为真,它会将 isclick 设置为 true,而您的“else”将 isclick 设置为 false,即使它必须已经为假。
    • 谢谢,我会尝试删除 onclick 中的 isclick=true 和 isclick=false,重新启动时我想检索按钮的保存状态,是否需要对代码进行任何其他更改?跨度>
    • 我认为您的 isclick 变量是静态的这一事实可能会导致问题,尽管我可能错了。无论如何,我会尝试使其成为非静态的。
    • 我什至将 isclick 变量全局声明为 private boolean isclick = false;还是不行
    猜你喜欢
    • 2012-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    • 2023-04-08
    • 1970-01-01
    • 2019-05-20
    • 2013-09-24
    相关资源
    最近更新 更多