我有十个按钮,其中只有一个按钮在任何时间点都有红色背景,红色按钮有一个onClicklistener。 当点击这个红色按钮时,随机的这10个按钮中的一个将获得红色背景,这个新的红色按钮应该使用之前的onCLickListener,当再次点击这个新的红色按钮时,这10个按钮中的一个随机获得红色背景,onClickListener应该被分配给它并且每次点击RedButton时都有一个计数器。
实施例: 有四个按钮 [WhiteButton WhiteButton RedButton WhiteButton]并且只有RedButton有onClickListener 单击RedButton时,其中一个按钮颜色变为红色 [WhiteButton RedButton WhiteButton WhiteButton] 当点击这个新的RedButton时,按钮就变成了 [WhiteButton WhiteButton WhiteButton RedButton]
第一次单击RedButton时,我可以将十个按钮之一的颜色更改为红色,但无法将OnClickListener设置为新的RedButton。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ourButton = (Button) findViewById(R.id.button);
ourTextView = (TextView) findViewById(R.id.textView);
buttons[0] = (Button) findViewById(R.id.button2);
buttons[1] = (Button) findViewById(R.id.button3);
buttons[2] = (Button) findViewById(R.id.button4);
buttons[3] = (Button) findViewById(R.id.button5);
Random r = new Random();
oddValue = r.nextInt(4 - 0);
buttons[oddValue].setBackgroundColor(Color.RED);
buttons[oddValue].setOnClickListener(new ourOnClickListener(this));
ourOnClickListener
public class ourOnClickListener implements OnClickListener{
MainActivity caller;
private int count;
public ourOnClickListener(MainActivity activity) {
this.caller = activity;
this.count = 0;
}
public void onClick(View view) {
int i;
count = count + 1;
Random r = new Random();
int oddValue_new = r.nextInt(4 - 0);
caller.buttons[oddValue_new].setBackgroundColor(Color.RED);
caller.ourTextView.setText("Count : " + count);
}
}
答案 0 :(得分:0)
您可以像设置背景颜色一样进行:
caller.buttons[oddValue_new].setOnClickListener(this);
由于您是onClickListener,因此可以将其称为新的onClickListener。
答案 1 :(得分:0)
如果您只想要红色按钮可以点击。您可以为所有人设置Enabled为false(排除红色按钮)。因此,您将setOnClickListener设置为所有按钮。
如果可以单击所有按钮,则仅在单击红色时运行操作。您应该检查点击的按钮并比较它是否为事件中的红色按钮单击
从所有按钮'setOnClickListener(null)'中删除OnClickListener,并将SetOnClickListener删除为红色
答案 2 :(得分:0)
我会以不同的方式解决这个问题。
将引用保存为红色背景redButton
。
所有按钮都具有相同的onClick
。在onClick
中,只需确认点击的按钮是具有红色背景的按钮(仅通过引用检查)。如果不是 - 什么都不做。如果是:选择新按钮,更改背景并保存对新按钮的引用。
您的onClick
方法应如下所示:
public void onClick(View view) {
if (view == redButton) {
redButton.setBackgroundColor(Color.WHITE);
Random r = new Random();
int oddValue_new = r.nextInt(4 - 0);
redButton = buttons[oddValue_new];
redButton.setBackgroundColor(Color.RED);
}
}
<强>更新强>
正如@Mr Phuc 87建议你可以使用enabled
。我认为这是非常好的方法。除enabled
之外,您还可以使用state-list。创建状态列表,其中android:state_enabled=false
为白色背景,android:state_enabled=true
为红色背景。现在您只需更改按钮的enabled
属性即可。
OnClick
应如下所示:
public void onClick(View view) {
redButton.setEnabled(false);
Random r = new Random();
int oddValue_new = r.nextInt(4 - 0);
redButton = buttons[oddValue_new];
redButton.setEnabled(true);
}
state-list
应如下(将其放在drawable
中):
<selector xmlns:android="http://schemas.android.com/apk/res/android"
<item android:state_selected="false" android:drawable=@color/white />
<item android:state_selected="true" android:drawable=red_here />
</selector>