【问题标题】:Android Quiz App - RadioGroup and CheckBoxAndroid 测验应用程序 - RadioGroup 和 CheckBox
【发布时间】:2017-01-30 04:57:55
【问题描述】:

我为一个测验应用程序编写了 XML。

将有 (10) 个问题,一些 RadioGroup 和一些 CheckBox,但问题的类型不会按任何顺序排列。所以第一个是radiogroup,第二个checkbox,第3、4、5个radiogroup,第6、7个checkbox等等。

RadioGroup 显然只有一个正确答案,而 CheckBox 有两三个正确答案。

我想创建一个“检查测验”按钮,它在滚动测验的顶部显示一条消息,给出正确的数字,并在每个错误答案的前面显示一个红色的大红色“X”。

我不确定 MainActivity java 文件中的 Java 代码从哪里开始。


MainActivity.java


package com.example.android.quiztest;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.CheckBox;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.Toast;
import android.widget.EditText;
import android.widget.TextView;

/**
 * package com.example.android.quiztest;
 * This app displays a radio button and checkbox quiz, and then grades the quiz, *  displaying the score and identifying the incorrect answers.
 **/

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(com.example.android.quiztest.R.layout.activity_main);
    }
}

activity_main.xml

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.android.quiztest.MainActivity"
    android:fillViewport="false">


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginLeft="@dimen/dimension_1"
        android:orientation="vertical">


        <EditText
            android:id="@+id/name_text_view_STUDENT"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:hint="@string/text_person_name"
            android:inputType="textPersonName" />

        <TextView
            android:id="@+id/label_text_view_DIRECTIONS"
            style="@style/HeaderTextStyle"
            android:textSize="20sp"
            android:layout_marginTop="@dimen/dimension_1"
            android:text="@string/text_directions" />


        <TextView
            android:id="@+id/label_text_view_1"
            style="@style/HeaderTextStyle"
            android:layout_marginTop="@dimen/dimension_1"
            android:text="@string/text_1" />

        <RadioGroup
            android:id="@+id/radioGroup_1"
            style="@style/HeaderTextStyle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">


            <RadioButton
                android:id="@+id/radioButton_1a"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/dimension_1"
                android:paddingLeft="@dimen/dimension_4"
                android:paddingRight="@dimen/dimension_5"
                android:text="@string/text_1a"
                android:textSize="@dimen/text_size_1" />

            <RadioButton
                android:id="@+id/radioButton_1b"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/dimension_1"
                android:paddingLeft="@dimen/dimension_4"
                android:paddingRight="@dimen/dimension_5"
                android:text="@string/text_1b"
                android:textSize="@dimen/text_size_1" />

            <RadioButton
                android:id="@+id/radioButton_1c"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/dimension_1"
                android:paddingLeft="@dimen/dimension_4"
                android:paddingRight="@dimen/dimension_5"
                android:text="@string/text_1c"
                android:textSize="@dimen/text_size_1" />

        </RadioGroup>

        <View
            android:layout_width="fill_parent"
            android:layout_height="2dp"
            android:layout_marginTop="25dp"
            android:background="#c0c0c0" />

        <TextView
            android:id="@+id/label_text_view_2"
            style="@style/HeaderTextStyle"
            android:layout_marginTop="@dimen/dimension_1"
            android:text="@string/text_2" />



            <CheckBox
                android:id="@+id/checkBox_2a"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:paddingLeft="@dimen/dimension_4"
                android:paddingRight="@dimen/dimension_5"
                android:text="@string/text_2a"
                android:textSize="@dimen/text_size_1" />

            <CheckBox
                android:id="@+id/checkBox_2b"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/dimension_1"
                android:paddingLeft="@dimen/dimension_4"
                android:paddingRight="@dimen/dimension_5"
                android:text="@string/text_2b"
                android:textSize="@dimen/text_size_1" />

            <CheckBox
                android:id="@+id/checkBox_2c"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/dimension_1"
                android:paddingLeft="@dimen/dimension_4"
                android:paddingRight="@dimen/dimension_5"
                android:text="@string/text_2c"
                android:textSize="@dimen/text_size_1" />



    </LinearLayout>


</ScrollView>

strings.xml

<resources>

    <string name="text_button_1">check answers</string>

    <string name="app_name">Quiz Test</string>
    <string name="text_person_name">Type student name here.</string>
    <string name="text_directions">Select ALL correct answers:</string>

    <string name="text_1">1) probability distribution</string>
    <string name="text_1a">1a) A smooth curve indicating the frequency distribution for a discontinuous random variable.</string>
    <string name="text_1b">1b) A discontinuous dot diagram showing the frequency distribution for a random variable.</string>
    <string name="text_1c">1c) A smooth curve indicating the frequency distribution for a continuous random variable.</string>


    <string name="text_2">2)    normal distribution</string>
    <string name="text_2a">2a)   A smooth double-peak bell-shaped curve symmetrical about the mean.</string>
    <string name="text_2b">2b)   A smooth single-peak curve </string>
    <string name="text_2c">3c)   A bell-shaped curve symmetrical about the mean. </string>

</resources>

【问题讨论】:

    标签: java android radio-group android-checkbox


    【解决方案1】:

    我更新了 XML 以提供在错误答案前标记红色 X 的功能:

    文件:activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    
    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="false"
        tools:context=".MainActivity">
    
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginLeft="@dimen/dimension_1"
            android:orientation="vertical">
    
    
            <EditText
                android:id="@+id/name_textView_STUDENT"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:hint="@string/text_person_name"
                android:inputType="textPersonName" />
    
            <TextView
                android:id="@+id/textView_directions"
                style="@style/HeaderTextStyle"
                android:layout_marginTop="@dimen/dimension_1"
                android:text="@string/text_directions"
                android:textSize="20sp" />
    
    
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="@dimen/dimension_1"
                android:orientation="horizontal">
    
                <TextView
                    android:id="@+id/incorrect_question_1"
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent"
                    android:layout_marginTop="@dimen/dimension_1"
                    android:gravity="center"
                    android:text="X"
                    android:textColor="#ff0000"
                    android:textSize="30dp"
                    android:visibility="gone" />
    
                <TextView
                    android:id="@+id/textView_1"
                    style="@style/HeaderTextStyle"
                    android:layout_marginTop="@dimen/dimension_1"
                    android:text="@string/text_1" />
            </LinearLayout>
    
    
            <RadioGroup
                android:id="@+id/radioGroup_1"
                style="@style/HeaderTextStyle"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">
    
    
                <RadioButton
                    android:id="@+id/radioButton_1a"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="@dimen/dimension_1"
                    android:paddingLeft="@dimen/dimension_4"
                    android:paddingRight="@dimen/dimension_5"
                    android:textSize="@dimen/text_size_1"
                    android:text="@string/text_1a"
                    android:onClick="onClick_1a"/>
    
    
                <RadioButton
                    android:id="@+id/radioButton_1b"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="@dimen/dimension_1"
                    android:paddingLeft="@dimen/dimension_4"
                    android:paddingRight="@dimen/dimension_5"
                    android:text="@string/text_1b"
                    android:textSize="@dimen/text_size_1"
                    android:onClick="onClick_2a"/>/>
    
                <RadioButton
                    android:id="@+id/radioButton_1c"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="@dimen/dimension_1"
                    android:paddingLeft="@dimen/dimension_4"
                    android:paddingRight="@dimen/dimension_5"
                    android:text="@string/text_1c"
                    android:textSize="@dimen/text_size_1"
                    android:onClick="onClick_3a"/>
    
            </RadioGroup>
    

    并为单选组和复选框开发了 Java 评分逻辑:

    文件:MainActivity.java

    package com.example.android.quiztest2;
    
    /**
     * *Below added my unique package name "com.example.android.justjava4"
     */
    
    import android.content.Context;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    import android.widget.Button;
    import android.widget.CheckBox;
    import android.widget.RadioButton;
    import android.widget.TextView;
    
    
    /**
     * package com.example.android.justjava4;
     * This app displays an order form to order coffee, and displays the information.
     * quantity is a global variable
     **/
    public class MainActivity extends AppCompatActivity {
        private RadioButton radioButton_1a, radioButton_1b, radioButton_1c, radioButton_4a, radioButton_4b, radioButton_4c,
                radioButton_5a, radioButton_5b, radioButton_5c, radioButton_6a, RadioButton_6b, radioButton_6c,
                radioButton_7a, radioButton_7b, radioButton_7c, radioButton_9a, radioButton_9b, radioButton_9c;
    
        private CheckBox checkBox_2a, checkBox_2b, checkBox_2c, checkBox_3a, checkBox_3b, checkBox_3c, checkBox_8a, checkBox_8b, checkBox_8c;
    
        int grade = 0;
    
        public void Score(int grade) {
            if (radioButton_1c.isChecked())  grade++;
    
            if (radioButton_4c.isChecked())  grade++;
    
            if (radioButton_5c.isChecked()) grade++;
    
            if (radioButton_6c.isChecked()) grade++;
    
            if (radioButton_7c.isChecked()) grade++;
    
            if (radioButton_9c.isChecked()) grade++;
    
            if (checkBox_2a.isChecked() && !checkBox_2b.isChecked() && checkBox_2c.isChecked()) grade++;
    
            if (checkBox_3a.isChecked() && checkBox_3b.isChecked() && checkBox_3c.isChecked()) grade++;
    
            if (checkBox_8a.isChecked() && !checkBox_8b.isChecked() && checkBox_8c.isChecked()) grade++;
    
        }
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(com.example.android.quiztest2.R.layout.activity_main);
    
    
            final Context currentContext = this;
            Button button_grade_quiz = (Button)
                    findViewById(R.id.button_grade_quiz);
            button_grade_quiz.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
    
    
    
                    boolean answerCorrect1 = false;
    
                    TextView incorrectQuestionOne = (TextView) findViewById(R.id.incorrect_question_1);
    
                    if (!answerCorrect1) {
    
                        incorrectQuestionOne.setVisibility(View.VISIBLE);
                    } else {
    
                        incorrectQuestionOne.setVisibility(View.GONE);
    
                    }
    
                }
            });
        }
    }
    

    不确定如何将评分功能连接到其他 java 方法。

    【讨论】:

      【解决方案2】:

      简单答案:向您的 xml 添加一个按钮,并为其分配一个 id。例如,xml 很可能看起来像这样:

          <Button
              android:id="@+id/quiz_complete_button"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="Finish Quiz"
              android:textSize="@dimen/text_size_1"
              android:layout_gravity="center"/>
      

      然后,在您的 MainActivity 调用 setContentView 后,您将通过其 id 找到您的按钮视图,并为其设置一个 onClickListener。我下面的示例代码包含一个粗略的测试,当单击按钮时将显示 Toast 消息,以便您可以看到按钮已正确连接到侦听器。

      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
          final Context currentContext = this;
          Button quizAnsweredButton = (Button) findViewById(R.id.quiz_complete_button);
          quizAnsweredButton.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
                  //do something
                  Toast.makeText(currentContext, "TESTING", Toast.LENGTH_LONG).show();
              }
          });
      }
      

      (注意 - 澄清一下,上面的粗体表示您只能在视图显示后引用它们 - 这是上面的 setContentView 所做的。如果您尝试在 setContentView 之前调用 findViewById,您将收到崩溃。 )

      这里变得更复杂了。 在不编写整个解决方案的情况下,如果用户在 xml 中提交所有答案错误的测验,我会为达到您的目标而做的是添加您希望测验看起来像的全部内容。我已经为问题 1 创建了 xml。(我添加了一个水平 LinearLayout 以保留您的 xml 的其余部分,但是对于您的视图的复杂性,我建议使用 RelativeLayout) 如您所见,错误标签的可见性设置为“已消失”。这意味着不会看到视图,但也不会占用父视图的空间。 "invisible" 会隐藏视图,但它的空间仍会被填充。

      现在,当提交测试时,我们将显示错误答案标签。当然,在您的完整解决方案中,您将评估答案是否正确。

      问题一标签的XML:

      <LinearLayout
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:orientation="horizontal">
              <TextView
                  android:id="@+id/question_1_incorrect_label"
                  android:layout_width="wrap_content"
                  android:layout_height="match_parent"
                  android:textColor="@color/red"
                  android:gravity="center"
                  android:visibility="gone"/>
              <TextView
                  android:id="@+id/label_text_view_1"
                  style="@style/HeaderTextStyle"
                  android:layout_marginTop="@dimen/dimension_1"
                  android:text="@string/text_1" />
          </LinearLayout>
      

      更新的 MainActivity:

      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
          final Context currentContext = this;
          Button quizAnsweredButton = (Button) findViewById(R.id.quiz_complete_button);
          quizAnsweredButton.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
                  boolean answer1Correct = false;
                  //TODO: Evaluate the actual value of answer1Correct boolean.
                  TextView questionOneIncorrectLabel = (TextView)findViewById(R.id.question_1_incorrect_label);
                  if (!answer1Correct) {
                      questionOneIncorrectLabel.setVisibility(View.VISIBLE);
                  }
                  else {
                      questionOneIncorrectLabel.setVisibility(View.GONE);
                  }
              }
          });
      }
      

      注意 - 在 colors.xml 中,添加:

      <color name="red">#FF0000</color
      

      剩下的应该只是一些跑腿工作,以及 MainActivity 中用于分析每个答案是否正确的代码。

      最后,提示简化您的正确答案信息。您可以创建一个带有占位符的字符串常量,以便稍后添加一个值。例如:

      <string name="text_quiz_complete_answers">You answered %d question(s) correctly.</string>
      

      从 strings.xml 文件中提取此字符串值时,您可以这样引用它:

      String.format(getString(R.string.text_quiz_complete_answers), 5)
      

      5 只是一个占位符。而是应该有你计算的数值。

      有关格式化字符串的更多信息,我会参考这篇文章:Are parameters in strings.xml possible?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-01-31
        • 2017-01-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多