3

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

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

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

背景画像が 2 つあります。

ボタンを押す -> ハイライトされた背景画像 -> 同じボタンを 2 回押す -> 通常の背景画像に変更

アプリケーションを初めて実行し、ボタンを押すと背景画像が変更されます。2 番目の子アクティビティに移動して戻ってくると、ドローアブル リソースが変更されてボタンが押された状態になります。だから大丈夫

同じボタンを押して、2 番目のアクティビティから同じアクティビティに戻った場合。ここでは機能していません

最初の子アクティビティ -> ボタンを押す -> ハイライトされた背景画像の変更 -> 2 番目のタブホストの子アクティビティに移動 -> 最初の子アクティビティに戻る -> ボタンを押した後、同じ背景画像が表示されます (これで問題ありません)。

問題は

最初の子アクティビティで同じボタンを押す -> 背景画像が通常に変わる -> 2 番目のタブホストの子アクティビティに移動する -> 最初の子アクティビティに戻る -> ただし、ボタンの背景リソースは通常ではなく強調表示されます

アプリケーションをもう一度実行しても、ボタンにはハイライトされた背景画像が表示されます

最初の子アクティビティで使用している以下のコード

編集済み

public void onResume() {
    super.onResume();
    SharedPreferences sharedPreferences = this.getSharedPreferences(
            "sharedPreferences", MODE_PRIVATE);

    int which = sharedPreferences.getInt("sharedPreferences", 1);
    switch (which)
    { 
        case 1:
            seatdirnbtn.setBackgroundResource(R.drawable.icon4); break; 
        case 2:
            seatdirnbtn.setBackgroundResource(R.drawable.icon4hlt); break;
        default:
            seatdirnbtn.setBackgroundResource(R.drawable.icon4); break;
    }
}

public void onPause() {
    super.onPause();
     boolean isclick = false;
    SharedPreferences sharedPreferences = this.getSharedPreferences(
            "sharedPreferences", MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPreferences.edit();

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

        editor.putInt("sharedPreferences", 2).commit();
    }
}

EDIT2

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

};
4

2 に答える 2

0

これが私が意味したことです:

boolean[] btnBool = new boolean[2]; // number of buttons

private View.OnClickListener listner1 = new View.OnClickListener() {
    public void onClick(View v) {
        toggleBtn(0); //zero refers to which index of the array for button button
        setDrawables();
    }

};

public void onResume() {
    super.onResume();
    toggleAllBtns();
    setDrawables();
}

private void toggleBtn(int index) {
    if(btnBool[index]) {
        btnBool[index] = false;
    } else {
        btnBool[index] = true;
    }
}

private void toggleAllBtns() {
    // first switch the values of the array
    for (int i = 0; i < btnBool.length; i++) {
        if(btnBool[i]) {
            btnBool[i] = false;
        } else {
            btnBool[i] = true;
        }
    }       
}

private void setDrawables() {
    // then set drawables based on values
    if (btnBool[0]) {
        seatdirnbtn.setBackgroundResource(R.drawable.icon4);
    } else {
        seatdirnbtn.setBackgroundResource(R.drawable.icon4hlt);
    }
}
于 2012-12-12T07:59:07.920 に答える
0

この変更を試してください:

if (isclick) {  
        seatdirnbtn.setBackgroundResource(R.drawable.icon4hlt);   
        editor.clear();
        editor.putInt("sharedPreferences", 2).commit();
    }
else {
        seatdirnbtn.setBackgroundResource(R.drawable.icon4);   
        editor.clear();
        editor.putInt("sharedPreferences", 1).commit();
}
于 2012-12-12T04:50:17.140 に答える