0

3 つのアクティビティを持つタブホストがあり、各アクティビティのボタンの押された状態を保存したい

では、3 つの子アクティビティすべての各ボタンの押された状態を保存して、あるアクティビティから別のアクティビティに移動したときに、ボタンの押された状態が戻るときに反映されるようにするにはどうすればよいでしょうか。最初のアクティビティ -> 4 つのボタンすべてが押された -> 2 番目のアクティビティに移動 -> 最初のアクティビティに戻る -> 最初のアクティビティのすべてのボタンが押された状態である必要があります

2番目の子タブに移動して最初の子タブに来ると、変更が反映されていません(押したボタンが押された状態ではありません)

ヘルプはいつでも大歓迎です、ありがとう

これは最初のタブホスト子アクティビティの私のコードです

         @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()メソッドは1回だけ呼び出されますが、特定のアクティビティを持つタブに切り替えるたびに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 に答える