安卓:内tabhost共享偏好不工作(Android : Shared preferences in

2019-10-17 11:50发布

我有三个活动tabhost,我要保存的每个活动的按钮的按下状态

所以,现在我怎么能保存每个按钮的按下状态在所有三个子活动,这样,当我从一个活动移动到另一个按钮按下的状态将在搬回来体现。 第一项活动 - >所有4个按钮按下 - >去第2个活动 - >回来的第一项活动 - >在第一次活动的所有按钮应该是按下状态

当我去的第二个孩子标签,想到的第一个孩子选项卡中的变化(这是我按的按钮在按下状态)不反映

帮助总是赞赏,感谢

这是我在第一tabhost儿童活动代码

         @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    seatdirnbtn.setOnClickListener(listner1);
    seatdirnbtn1.setOnClickListener(listner2);
        seatdirnbtn.setPressed(true);
        seatdirnbtn1.setPressed(true);
        this.LoadPreferences();

       }

    private void SavePreferences() {

    SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences("sharedPreferences",MODE_WORLD_READABLE);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putBoolean("state", seatdirnbtn.isEnabled());
    editor.putBoolean("state1", seatdirnbtn1.isEnabled());
    editor.commit();

}

private void LoadPreferences() {
    SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences("sharedPreferences",MODE_WORLD_READABLE);
    Boolean state = sharedPreferences.getBoolean("state", false);
    Boolean state1 = sharedPreferences.getBoolean("state1", false);
    seatdirnbtn.setPressed(state);
    seatdirnbtn1.setPressed(state1);
}

         @Override
     protected void onStart() {
    super.onStart();
        LoadPreferences();
        }

        @Override  
       protected void onPause() {
    SavePreferences();
    super.onPause();
      }

       public static boolean isclick = false;
private View.OnClickListener listner1 = new View.OnClickListener() {

    public void onClick(View v) {

        if (isclick) {
            seatdirnbtn.setBackgroundResource(R.drawable.icon4hlt);

        } else {
            seatdirnbtn.setBackgroundResource(R.drawable.icon4);
        }

        isclick = !isclick;
    }

};

private View.OnClickListener listner2 = new View.OnClickListener() {

    public void onClick(View v) {

        if (isclick) {
            seatdirnbtn1.setBackgroundResource(R.drawable.icon2hlt);
        } else {
            seatdirnbtn1.setBackgroundResource(R.drawable.icon2);
        }

        isclick = !isclick;
    }

};

Answer 1:

也许你应该重写你应该设置按钮状态的onResume()方法。 这种方法的onCreate()之后调用,并已建立连活动。 如果您有tabHost他们不是每次切换标签等等的onCreate时间创建活动()方法将被调用一次,但的onResume()每次切换到与特定的活动标签的时间。

您的代码加载的偏好是在onStart()方法。 看看这里的活动周期 。 你可以看到,如果您在活动之前停止,但如果它只是暂停永远不会调用此方法只调用。

编辑:

如果你有一个像刚刚2个状态在你的代码的问题就可以更好地使用切换按钮也一般有2个状态。 你可以风格它为每个国家不同的背景。 本教程可能是有益的 。

比你有一点点不同的监听器:

    toggleButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {

            if(checked) {
                //do sth if it's checked
            } else {
                //do sth if it's not checked;
            }

        }
    });

通过编程修改状态为他们:

toggleButton.setChecked(true); //or false

所以最后你可以保存这个状态SharedPreferences:

editor.putBoolean("toggleButton1",toggleButton.isChecked());

当你需要这种状态:

boolean isChecked = sharedPreferences.getBoolean("toggleButton1",false);
toggleButton.setChecked(isChecked);

选择器将采取的切换按钮的背景对于每个状态的照顾。



文章来源: Android : Shared preferences inside tabhost not working