从上周开始,我在保存首选项方面面临一个奇怪的问题。

我正在与android兼容的板上工作。

我面临的实际问题是

我有4个按钮,然后在按钮上单击我正在更改按钮的背景图像

Onfirstclick->将按钮的背景图像更改为高亮显示->第二次单击->更改为普通背景图像,第一次运行时,我将保留普通背景按钮图像

但是重新启动后,尽管我使用共享首选项,但按钮背景图像并未保存在工作板上。

我有一个电源按钮,可以打开和关闭电源,以重新启动电路板。

无论我在onclick中拥有的图像(普通/高亮),重新启动电路板后应该获得的图像

好是

           the code is working perfectly in android mobile but not in my board


这是我的代码。

任何帮助总是很感激。

   public class SharedprefsActivity extends Activity  {

    protected static final String TAG = "HvacActivity";
    /** Called when the activity is first created. */
    private Button seatdirnbtn;
    private SharedPreferences prefs;
    private String prefName = "MyPref";
    private SharedPreferences.Editor editor;
    private boolean isclick;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        seatdirnbtn = (Button) findViewById(R.id.seatdirnbtn);
        seatdirnbtn.setOnClickListener(listner1);
    }

    public void onResume() {
        super.onResume();
        getPrefAndButtonState();
    }

    public void onPause() {
        super.onPause();
        setPrefAndButtonState();
    }

    @Override
    public void onRestart() {
        super.onRestart();
        getPrefAndButtonState();
    }

    @Override
    public void onStop() {
        super.onStop();
        setPrefAndButtonState();
    }

    public void getPrefAndButtonState(){
        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);
        }
    }

    public void setPrefAndButtonState(){
        editor = prefs.edit();
        editor.putBoolean("prefName", isclick);
        editor.commit();
        getPrefAndButtonState();
    }

    private View.OnClickListener listner1 = new View.OnClickListener() {
        public void onClick(View v) {
            if (isclick) {
                isclick = false;
                setPrefAndButtonState();
            } else if (!isclick) {
                isclick = true;
                setPrefAndButtonState();
            }
        }
    };
}

最佳答案

尝试使用getApplicationContext()代替this作为:

setPrefAndButtonState方法中:

public void setPrefAndButtonState(){
      prefs = getApplicationContext().
                getSharedPreferences(prefName, MODE_PRIVATE); <<missing this line
      editor = prefs.edit();
      editor.putBoolean("prefName", isclick);
      editor.commit();
      getPrefAndButtonState();
    }


并在getPrefAndButtonState方法中

public void getPrefAndButtonState(){
    prefs = getApplicationContext().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);
    }
}

09-27 19:23