Android Studio:使用radioButtons进行测验

时间:2015-05-09 12:43:59

标签: java xml android-studio

因此,我正在尝试制作一个应用,您可以在radioButton内选择radioGroup的答案,当您点击提交按钮时,它会更改textbox来说明“正确”或“错误回答”,具体取决于选择的按钮。我可以运行该应用,然后选择radioButton,但是当我点击提交时,该应用会崩溃并说“不幸的是,MyApp已停止”。

这是我的代码:

XML

 <RadioGroup
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/question1"
    android:id="@+id/q1radiobox">

        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/q1a1"
            android:id="@+id/q1a1" />
        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/q1a2"
            android:id="@+id/q1a2"/>
        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/q1a3"
            android:id="@+id/q1a3"/>
        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/q1a4"
            android:id="@+id/q1a4"/>
    </RadioGroup>

    <Button
        android:onClick="checkResult"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/q1radiobox"
        android:text="Submit"/>

爪哇

   private void checkResult() {
      RadioButton rb;
      rb = (RadioButton) findViewById(R.id.q1a3);

      if (rb.isChecked()) {
        ((TextView) findViewById(R.id.answer1)).setText("@string/correct");
      } 
      else {
          ((TextView) findViewById(R.id.answer1)).setText("@string/incorrect");
    }
} 

非常感谢任何帮助;我无法弄清楚出了什么问题!

编辑:我已经发布了解决方案。感谢@miselking指出其中一个问题。

2 个答案:

答案 0 :(得分:2)

好的,那么您需要知道的是,当您使用android:onClick="checkResult"方式定义点击事件时,您的checkResult方法需要将View作为参数,然后它可以响应onClick事件。因此,将您的方法更改为以下内容:

    private void checkResult(View v) {
      RadioButton rb;
      rb = (RadioButton) findViewById(R.id.q1a3);

      if (rb.isChecked()) {
        ((TextView) findViewById(R.id.answer1)).setText("@string/correct");
      } 
      else {
          ((TextView) findViewById(R.id.answer1)).setText("@string/incorrect");
    }

编辑:你得到的是一个警告,而不是一个错误。您收到该警告是因为您没有在方法中的任何位置使用参数v。您可以忽略它,如果您有多个按钮调用相同的方法,那么您将需要知道哪个按钮实际调用了该方法。

我们假设您有两个带有ID btnId1btnId2的按钮。他们都在xml文件中有这行代码:android:onClick="checkResult",所以他们都调用相同的方法(你可以这样做)。然后,当您单击这两个按钮中的任何一个时,哪一个实际调用了该方法?那么,这就是View v是必要的原因。然后,您将能够看到实际单击了哪个按钮并且适当地响应。 checkResult的实施示例:

public void checkResult(View view)
    {
        Log.d("TAG_BTN", "Someone called me. But who???");
        switch (view.getId())
        {
            case R.id.btnId1:
                Log.d("TAG_BTN", "BtnId1 called me. Do something, please...");
                break;
            case R.id.btnId2:
                Log.d("TAG_BTN", "BtnId2 called me. What next to do...");
                break;
        }
    }

希望您知道为什么需要View参数。

答案 1 :(得分:0)

所有这些麻烦之后,我发现问题如下:

 private void checkResult()

需要

public void checkResult(View view)

感谢@miselking指出缺少一个视图,并且在玩这个方法的时候,我发现纯粹的运气会导致公共/私人空白。