我正在尝试处理我为掷骰子应用程序所做的一些代码,如果按下掷骰按钮,它将显示随机的骰子侧面。我正在尝试在我的多项选择测验应用程序中重复使用这个概念,如果按下任何按钮,无论对错,它都会转到下一个问题:
我以为它看起来像这样,"按钮"代表所有被按下的按钮。但是,在这个多项选择测验中,我只想有 4 个按钮(A、B、C 和 D(,因为如果按下就会发生这种情况。我相信我可以通过每个按钮重复代码段落 4 次来实现这一点,但我想知道是否有更简单的方法让所有 4 个按钮都在同一行上表示
(我显示的很多代码都是针对骰子应用程序的,它主要是我需要帮助的第一行的第一个单词(
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("multic", "the Button has been pressed!");
Random randomNumberGenerator = new Random();
int number = randomNumberGenerator.nextInt(8);
Log.d("Dicee", "the random number is: " + number);
leftDice.setImageResource(diceArray[number]);
int number1 = randomNumberGenerator.nextInt(8);
rightDice.setImageResource(diceArray[number1]);
}
});
我希望按下其中一个按钮后,它将继续下一个问题。
您可以像这样定义侦听器:
View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("multic", "the Button has been pressed!");
Random randomNumberGenerator = new Random();
int number = randomNumberGenerator.nextInt(8);
Log.d("Dicee", "the random number is: " + number);
leftDice.setImageResource(diceArray[number]);
int number1 = randomNumberGenerator.nextInt(8);
rightDice.setImageResource(diceArray[number1]);
}
};
然后将其设置为任意数量的按钮:
button1.setOnClickListener(listener);
button2.setOnClickListener(listener);
button3.setOnClickListener(listener);
button4.setOnClickListener(listener);
您可以将单个侦听器对象与 switch 语句一起使用,以检查单击了哪个按钮。
Button b1,b2;
//findViews
View.OnClickListener listener=new View.OnClickListener() {
@Override
public void onClick(View v) {
//code
switch((Button)v){
case b1:
//code
break;
case b2:
//code
break;
}
//code
}
};
b1.setOnClickListener(listener);
b2.setOnClickListener(listener);
对于具有 4 个可能答案的多项选择测验,我建议您使用包含组成对象RadioButtom
对象的RadioGroup
,如下所示:
<RadioGroup xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<RadioButton android:id="@+id/radio_pirates"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/pirates"
android:onClick="onRadioButtonClicked"/>
<RadioButton android:id="@+id/radio_ninjas"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/ninjas"
android:onClick="onRadioButtonClicked"/>
</RadioGroup>
请注意每个RadioButton
如何具有 onClick
属性。您可以为所有单选按钮命名相同的方法,然后在活动或片段中通过 switch 语句对所有按钮使用一种方法,如下所示:
public void onRadioButtonClicked(View view) {
// Is the button now checked?
boolean checked = ((RadioButton) view).isChecked();
// Check which radio button was clicked
switch(view.getId()) {
case R.id.radio_pirates:
if (checked)
// Pirates are the best
break;
case R.id.radio_ninjas:
if (checked)
// Ninjas rule
break;
}
}
阅读更多: https://developer.android.com/guide/topics/ui/controls/radiobutton#java
我想的多种不同选择:
1(在所有按钮的 xml 上设置android:onClick="onNextQuestion"
。然后在您的 Java 代码中编写:
public void onNextQuestion(View view) {
// Do something in response to button click
}
2((在更多情况下可以更好地工作(创建一个NextQuestionClickListener
类,该类将实现接口View.OnClickListener
,并将onClick
执行所需的代码来实现该方法。
class NextQuestionClickListener implements View.OnClickListener {
@Override
public void onClick(View v) {
// Do something in response to button click
}
}
然后将侦听器设置为每个按钮:
NextQuestionClickListener nextQuestionClickListener = new NextQuestionClickListener();
Button button1 = (Button) findViewById(R.id.button1);
Button button2 = (Button) findViewById(R.id.button2);
...
button1.setOnClickListener(nextQuestionClickListener);
button2.setOnClickListener(nextQuestionClickListener);
...
3(使用RxJava和RxBindings
RxView.clicks(button1)
.mergeWith(RxView.clicks(button2))
.mergeWith(RxView.clicks(button3))
.mergeWith(RxView.clicks(button4))
.subscribe(aVoid -> {
// Do something in response to button click
}, throwable -> Log.e(TAG, "error in handling click of next question", throwable));
4(我也找到了黄油刀,你可以在那里做:
@Onclick({R.id.button1,R.id.button2,R.id.button3,R.id.button4})
void onButtonClick(View aView) {
// Do something in response to button click
}