1

在我的应用程序中,我有 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?

4

1 回答 1

3

如果您的“两个按钮” onClick 处理程序调用Activity.setContentView(int),则所有按钮都将重置为在原始 XML 布局中指定的方式。新视图将被夸大,并且这些视图没有标签(您似乎没有在调用 后重新设置标签setContentView)。空标签不会匹配您的任何颜色字符串,因此您的按钮不会循环它们的背景。

如果您想保持视图的原样,请不要重置 Activity 的内容视图。在大多数情况下,setContentViewActivity 的每个生命周期只调用一次,尽管显然可能有一些例外。

于 2012-04-12T04:22:09.937 回答