0

3 つのアクティビティを持つタブ ホストがあり、各アクティビティには 4 つのボタンがあります。

ボタンを押すたびに、このようにバックグラウンドのドローアブル リソースを変更しています

 case R.id.button1:
        if (isclick) {
            b1.setBackgroundResource(R.drawable.icon4hlt);
        } else {
            b1.setBackgroundResource(R.drawable.icon4);
        }

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

ホームボタンと戻るボタンを押しても動作するはずです。

共有設定が良いアイデアであることは知っており、関連するスレッドを調べましたが、これを行う方法がわかりませんでした.

どんな助けでも大歓迎です、ありがとう

4

1 に答える 1

0

あなたが述べたように、押されたボタンのIDを共有設定に保持できます。すべてのアクティビティの一連の ID を保存します。このようなもの:

public void onStop() {
     SharedPreferences pref = // getPreferences;
     Set<String> ids = new HashSet<String>();
     for (Button button : buttons) {
         if (button is pressed) {
             ids.add(String.valueOf(button.getId()));
         }
     }
     pref.edit().putStringSet(CURRENT_ACTIVITY_NAME, ids).commit();
}

public void onStart() {
    SharedPreferences pref = // get preferences;
    Set<String> ids = pref.getStringSet(CURRENT_ACTIVITY_NAME, Collections.emptySet<String>());
    for (String id : ids) {
        Button button = findViewById(Integer.parseInt(id));
        set button pressed
    }
} 

ただし、アクティビティが再作成されないため、タブを切り替えても、押された状態はリセットされるべきではないと思います。

于 2012-12-07T14:35:13.420 に答える