0

我有一个包含三个活动的 tabhost,我想保存每个活动的按钮的按下状态

那么现在如何保存所有三个子活动中每个按钮的按下状态,以便当我从一个活动移动到另一个活动时,按钮按下状态将反映在返回时。第一个活动->按下所有4个按钮->转到第二个活动->返回第一个活动->第一个活动中的所有按钮都应处于按下状态

当我转到第二个子选项卡并进入第一个子选项卡时,更改(我按下的按钮未处于按下状态)没有反映

总是感谢帮助,谢谢

这是我在第一个 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;
    }

};
4

1 回答 1

0

可能您应该覆盖 onResume() 方法,您应该在其中设置按钮状态。此方法在 onCreate() 之后调用,甚至活动已经创建。如果您在 tabHost 中有活动,则每次在选项卡之间切换时都不会创建它们,因此 onCreate() 方法只会被调用一次,但每次切换到具有特定活动的选项卡时都会调用 onResume()。

您正在加载首选项的代码位于 onStart() 方法中。在这里查看活动生命周期。您可以看到,仅当您的活动之前停止时才会调用此方法,但如果它只是暂停则永远不会调用。

编辑:

如果您的代码中只有 2 个状态,那么使用通常也有 2 个状态的 ToggleButton 可能会更好。您可以为每个州设置不同的背景。本教程可能会有所帮助

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

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

选择器将负责为每个状态切换按钮背景。

于 2012-12-10T07:32:00.580 回答