Android Quiz App - RadioGroup和CheckBox

时间:2016-09-21 19:30:30

标签: java android radio-group android-checkbox

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

会有(10)个问题,一些RadioGroup和一些CheckBox,但问题的类型不会是任何顺序。所以第一个是无线电组,第二个复选框,第3,第4和第5个无线电组,第6个和第7个复选框等。

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

我想创建一个“CHECK QUIZ”按钮,在滚动测验的顶部显示一条消息,使数字正确,并在每个错误答案的前面显示一个红色的大红色“X”。 / p>

我不确定在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>

2 个答案:

答案 0 :(得分:1)

我更新了XML,以便能够在错误答案前标记红色X:

file: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方法。

答案 1 :(得分:0)

简单答案:在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 AFTER 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。(为了保留你的xml的其余部分,我添加了一个水平的LinearLayout,但是为了你的视图的复杂性,我建议使用RelativeLayout) 如您所见,错误标签的可见性设置为&#34;已消失&#34;。这意味着将不会看到视图,但也不会占用父视图的空间。 &#34不可见#34;会隐藏视图,但它的空间仍然会被填满。

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

问题一标签的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?