setBackgroundDrawable正常工作;直到按下另一个按钮,为什么?

时间:2012-04-12 04:10:23

标签: java android drawable

在我的应用程序中,我有4个主要按钮,另外还有2个按钮。这4个按钮在主要活动开始时声明。

Button button1, button2, button3, button4;
button1 = (Button) findViewById(R.id.button1);
button1.setTag("blue");

(每个按钮都有一个标签,设置方式与button1相同)

我想在按下时按下不同颜色的四个按钮。我通过以下方式管理这个;

public void button1(View v) {

    if ("blue".equals(button1.getTag())) {
        button1.setBackgroundDrawable(getResources().getDrawable(
                R.drawable.brown));
        button1.setTag("brown");
    } else if ("brown".equals(button1.getTag())) {
        button1.setBackgroundDrawable(getResources().getDrawable(
                R.drawable.red));
        button1.setTag("red");
    } else if //...etc

这一切都很好,直到我按下任意两个按钮,其中一个按钮的示例代码

    public void back(View v) {
    setContentView(R.layout.main);
    t = new TextView(this);
    t = (TextView) findViewById(R.id.textView1);
    t.setText("");
}

按下两个按钮中的任何一个后,颜色会变回xml文件中的原始可绘制集

android:background="@drawable/blue"

现在,当我按下4个主按钮时,drawable不会改变,但我肯定知道它正在重新标记,所以为什么在按下按钮后它不会改变drawable?

1 个答案:

答案 0 :(得分:3)

如果你的'两个按钮'onClick处理程序调用{​​{1}},那么所有按钮都将重置为原始XML布局中的指定方式。 新视图会被夸大而且这些视图没有标记(您在调用Activity.setContentView(int)后似乎没有重新设置标记)。空标记与您的任何颜色字符串都不匹配,因此您的按钮不会循环其背景。

如果要维护视图的方式,请不要重置活动的内容视图。在大多数情况下,setContentView仅在活动的每个生命周期中调用一次,但显然可能会有一些例外。