3

我有一个包含三个活动的选项卡主机,并且在每个活动中我都有按钮。

在每次按下按钮时,我都会更改背景可绘制资源

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

我有两个背景图像。

按下按钮 -> 突出显示的背景图像 -> 第二次按下相同的按钮 -> 更改为正常背景图像

当我第一次运行应用程序时,如果我按下按钮,背景图像就会改变。如果我进入第二个子活动并返回,那么按钮处于按下状态并更改了可绘制资源。所以很好

第二次如果我按下相同的按钮并从第二个活动返回到相同的活动。在这里它不起作用

第一个子活动->按下按钮->高亮背景图像更改->转到第二个tabhost子活动->返回第一个子活动->按钮在按下后显示相同的背景图像(这很好)

问题是

现在您在第一个子活动中按下相同的按钮 -> 背景图像更改为正常 -> 转到第二个 tabhost 子活动 -> 返回第一个子活动 -> 但按钮背景资源突出显示而不是正常

即使我再次运行该应用程序,该按钮也会显示突出显示的背景图像

我在第一个孩子活动中使用的以下代码

已编辑

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

编辑2

     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

Here's what i meant:

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 回答