Android: 如何在单击时将 onClickListener 设置为不同的按钮
Android: How to set onClickListener to different button when clicked
我有十个按钮,其中只有一个在任何时候都有红色背景,红色按钮有一个 onClicklistener。
当点击这个红色按钮时,这十个随机按钮之一将变成红色背景,这个新的红色按钮应该使用之前的 onCLickListener,当再次点击这个新的红色按钮时,这十个随机按钮之一会变成红色背景,onClickListener 应该分配给它,每次单击 RedButton 时都有一个计数器计数。
示例:
有四个按钮
[WhiteButton WhiteButton RedButton WhiteButton] 只有RedButton有onClickListener
单击 RedButton 时,其中一个按钮颜色变为红色
[白色按钮红色按钮白色按钮白色按钮]
单击此新的 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));
我们的OnClickListener
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);
}
}
您可以像设置背景颜色一样进行操作:
caller.buttons[oddValue_new].setOnClickListener(this);
由于您是 onClickListener,因此您可以将其称为新的 onClickListener。
如果只想要红色按钮可以点击。您可以将 Enabled 全部设置为 false(不包括红色按钮)。因此,您将为所有按钮设置 OnClickListener。
如果所有的按钮都可以点击,只有点击红色时才会有运行动作。您应该检查单击的按钮并比较它是否是事件 Click
中的红色按钮
从所有按钮中移除 OnClickListener 'setOnClickListener(null)',并将 SetOnClickListener 设置为红色
我会以不同的方式解决这个问题。
保存对红色背景按钮的引用 redButton
。
所有按钮都相同onClick
。在 onClick
中,只需验证单击的按钮是否为红色背景(只需通过参考检查)。如果没有 - 什么都不做。如果是:select 新按钮,更改背景并保存对新按钮的引用。
您的 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>
我有十个按钮,其中只有一个在任何时候都有红色背景,红色按钮有一个 onClicklistener。 当点击这个红色按钮时,这十个随机按钮之一将变成红色背景,这个新的红色按钮应该使用之前的 onCLickListener,当再次点击这个新的红色按钮时,这十个随机按钮之一会变成红色背景,onClickListener 应该分配给它,每次单击 RedButton 时都有一个计数器计数。
示例: 有四个按钮 [WhiteButton WhiteButton RedButton WhiteButton] 只有RedButton有onClickListener 单击 RedButton 时,其中一个按钮颜色变为红色 [白色按钮红色按钮白色按钮白色按钮] 单击此新的 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));
我们的OnClickListener
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);
}
}
您可以像设置背景颜色一样进行操作:
caller.buttons[oddValue_new].setOnClickListener(this);
由于您是 onClickListener,因此您可以将其称为新的 onClickListener。
如果只想要红色按钮可以点击。您可以将 Enabled 全部设置为 false(不包括红色按钮)。因此,您将为所有按钮设置 OnClickListener。
如果所有的按钮都可以点击,只有点击红色时才会有运行动作。您应该检查单击的按钮并比较它是否是事件 Click
中的红色按钮
从所有按钮中移除 OnClickListener 'setOnClickListener(null)',并将 SetOnClickListener 设置为红色
我会以不同的方式解决这个问题。
保存对红色背景按钮的引用
redButton
。所有按钮都相同
onClick
。在onClick
中,只需验证单击的按钮是否为红色背景(只需通过参考检查)。如果没有 - 什么都不做。如果是:select 新按钮,更改背景并保存对新按钮的引用。
您的 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>