是否有一个Java命令表示“是否已按下任何按钮”?

时间:2019-03-24 15:38:49

标签: java android

我正在尝试为骰子滚动应用程序编写一些代码,如果按下滚动按钮,它将显示随机的骰子侧面。 我试图在我的多项选择测验应用程序中重复使用此概念,在该应用程序中,如果按下,对或错,则将继续下一个问题:

我当时想它看起来像这样,“按钮”代表所有被按下的按钮。 但是,在这个多选题测验中,我只希望有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]);


            }
        });

我希望在按下其中一个按钮后,它将继续进行下一个问题。

4 个答案:

答案 0 :(得分:2)

您可以这样定义侦听器:

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);

答案 1 :(得分:2)

您可以将单个侦听器对象与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);

答案 2 :(得分:0)

对于选择题测验,有四个可能的答案,我建议您将RadioGroup与组成RadioButtom对象一起使用,像这样:

<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

答案 3 :(得分:0)

我正在考虑的多种选择:

1) 在所有按钮的xml上设置android:onClick="onNextQuestion"。 然后在您的Java代码中输入:

public void onNextQuestion(View view) {
    // Do something in response to button click
}

2)(最好在more cases中使用)制作一个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)另外我还找到了butterknife,您可以在其中进行操作:

@Onclick({R.id.button1,R.id.button2,R.id.button3,R.id.button4})
void onButtonClick(View aView) {
    // Do something in response to button click
}