在我的应用程序中,我有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 回答
如果'two buttons' onClick处理程序调用
Activity.setContentView(int)
,则所有按钮将重置为在原始XML布局中指定它们的方式 . New views will be inflated and these will not have a tag (在调用setContentView
之后,您似乎没有重新设置标记) . 空标记与您的任何颜色字符串都不匹配,因此您的按钮不会循环其背景 .如果要维护视图的方式,请不要重置活动的内容视图 . 在大多数情况下,
setContentView
仅在活动的每个生命周期中调用一次,尽管显然可能有一些例外 .