数据库
首页 > 数据库> > 从数据库Android填充单选按钮

从数据库Android填充单选按钮

作者:互联网

我正在开发驾驶学校测试应用程序,我需要一些帮助.

我有这样的xml文件:

<!-- language: lang-xml -->
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/widget28"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#AAC1E2" >

    <LinearLayout
        android:id="@+id/widget29"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <ImageView
            android:id="@+id/i1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
             />

        <TextView
            android:id="@+id/e1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Enun"
            android:textAppearance="?android:attr/textAppearanceMedium" />

        <RadioGroup
            android:id="@+id/radioGroup1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >

            <RadioButton
                android:id="@+id/radio0"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:checked="true"
                android:text="RadioButton" />

            <RadioButton
                android:id="@+id/radio1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="RadioButton" />

            <RadioButton
                android:id="@+id/radio2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="RadioButton" />
        </RadioGroup>

         <ImageView
            android:id="@+id/i2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
             />

        <TextView
            android:id="@+id/e2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Enun"
            android:textAppearance="?android:attr/textAppearanceMedium" />

        <RadioGroup
            android:id="@+id/radioGroup2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >

            <RadioButton
                android:id="@+id/radio0"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:checked="true"
                android:text="RadioButton" />

            <RadioButton
                android:id="@+id/radio1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="RadioButton" />

            <RadioButton
                android:id="@+id/radio2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="RadioButton" />
        </RadioGroup>

… x 30次,并有一个按钮将更正测试并显示是否通过.如果您未通过3个或更少的问题,您就可以通过测试.

问题以这种方式存储:

Id_question Id_topic Id_test问题答案A答案B答案C答案OK图像

> id_question id_topic和id_test是整数字段
> Question和AnswerA-C是文本字段
> AnswerOK是一个整数字段.如果AnswerA OK = 1,AnswerB = 2,AnswerC = 3
>图像是从资源文件夹中提取的相关图像的名称.

我使用数据库填充xml中的每个字段.通过以下方式从数据库中提取图像和问题:

<!-- language: lang-java -->
    Cursor c = adbh.query(bundle.getString("test")); 
    //"test"-->"SELECT question, image FROM table WHERE id_test = 1"

        Integer i = 1;

        if (c.moveToFirst()) {
            do {
                String path = c.getString(index);
                String nimage = "i"+i;
                int idImage = getResources().getIdentifier(nimage, "id", this.getPackageName());
                ImageView image = (ImageView) findViewById(idImage);
                int idDrawable = getResources().getIdentifier(ruta, "drawable", this.getPackageName());
                image.setImageResource(idDrawable);

                String nenun = "e"+i;
                String enun = c.getString(anotherIndex);
                int idEnun = getResources().getIdentifier(nenun, "id", this.getPackageName());
                TextView txtenun = (TextView) findViewById(idEnun);
                txtenun.setText(enun);

                i++;
            } while (c.moveToNext());

如何填充单选按钮?该查询将是“从表WHERE id_test = 1中选择答案A,答案B,答案C”

我的最后一个问题是如何纠正测试.我认为将按下的单选按钮(我不知道怎么做)存储在数组中,然后与正确答案进行比较.该查询将是“从表WHERE id_test = 1中选择SELECT AnswerOK”.

例:

一系列已回答的问题:
    1 1 1 2 2 3 2 3 1 3 2 …
正确答案数组:
    3 2 1 2 2 3 2 3 2 2 2 …

<!-- language: lang-java -->
    for (int i=0; i<30; i++)
    if (a[i] == b[i])
    numberOfRightAnswers++;

谢谢 :)

解决方法:

How can I populate radiobuttons? The query would be “SELECT AnswerA,
AnswerB, AnswerC from table WHERE id_test = 1”

可能想直接在第一个查询中选择这些值,所以代替:

Cursor c = adbh.query(bundle.getString("test")); 
    //"test"-->"SELECT question, image FROM table WHERE id_test = 1"

将具有:

Cursor c = adbh.query(bundle.getString("test")); 
    //"test"-->"SELECT question, AnswerA,  AnswerB, AnswerC, image FROM table WHERE id_test = 1"

然后在while循环中,像对TextView txtenun一样,将文本分配给RadioButtons.

And my last question is how can I correct the test. I think on storing
radiobutton pressed (I don’t know exactly how) in an array and then
compare with correct answers.

将OnCheckedChangeListener()添加到所有RadioGroup中.在该侦听器中,您将获得RadioGroup,用户在其中检查了某些内容以及所检查的RadioButton的ID.用它来构造正确答案的数组.

一些建议:

也许您应该修改布局和当前方法.让用户滚动查看30个问题的布局可能不是一个好主意,尽管您只有在遇到特定问题时才会真正看到它们,但您正在加载许多资源(我不知道您的图片大小,如果它们很小,则可能不是问题).您还可以选择使用ListView布局或根据您所在的问题按需填充的一个问题的简单布局.我的建议将是第二个选择.该选项还将帮助您避免调用getIdentifier方法,此方法比findViewById慢,应避免使用.波纹管是一种布局:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#AAC1E2" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <ImageView
            android:id="@+id/questionImage"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <TextView
            android:id="@+id/questionText"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Enun"
            android:textAppearance="?android:attr/textAppearanceMedium" />

        <RadioGroup
            android:id="@+id/radioGroup1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >

            <RadioButton
                android:id="@+id/radio0"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:checked="true"
                android:text="RadioButton" />

            <RadioButton
                android:id="@+id/radio1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="RadioButton" />

            <RadioButton
                android:id="@+id/radio2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="RadioButton" />
        </RadioGroup>

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:weightSum="3" >

            <Button
                android:id="@+id/previousQuestion"
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:text="previous" />

            <Button
                android:id="@+id/validateTest"
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:text="validate" />

            <Button
                android:id="@+id/nextQuestion"
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:text="next" />
        </LinearLayout>
    </LinearLayout>

</ScrollView>

您将对该测试中的所有问题(包括所有数据)进行查询,并以一个静态字段int counter = 0开始.启动应用程序后,将光标移至计数器值(在计数器值为0时)开始):

c.moveToPosition(counter);

并使用该行中的值填充上述问题布局:

ImageView questionImage = (ImageView) findViewById(R.id.questionImage);
int idDrawable = getResources().getIdentifier(ruta, "drawable", this.getPackageName());
   questionImage.setImageResource(idDrawable);

String enun = c.getString(anotherIndex);
TextView txtenun = (TextView) findViewById(R.id.questionText);
txtenun.setText(enun);
// will do the same to populate the other parts of the question from the cursor

当用户按下nextQuestion按钮时,您将增加计数器的值(您应进行一些检查,以免使30个问题不至于过大),再次将光标移至计数器的位置,然后像上面那样填充布局.当用户按下上一个问题递减计数器时,移动光标并再次使用数据填充布局.
另外,您将只向OnRadiedGroup添加一个OnCheckedChangeListener.当该监听器触发时,您应该将问题ID(从您应该能够分辨出哪个问题的计数器值中)和选定的RadioButton存储在数据结构(可能是HashMap)中,然后从数据库,并查看用户是否是一个很好的驱动程序.

您也可以(可能)优化数据库.

编辑:

private ArrayList<Integer> responses = new ArrayList<Integer>(); // this will hold the number of the correct answer. Note that this will work if the user answers question one after the other
// if the user skips question you'll get in trouble, this is one of the reasons why your design is not so good.

String rg = "radioGroup" + i;
int idRg = getResources().getIdentifier(rg, "id", this.getPackageName());
RadioGroup radioGroup = (TextView) findViewById(idRg);
radioGroup.setOnChekedChangeListener(new OnCheckedChangeListener(){
       public void onCheckedChanged (RadioGroup group, int checkedId) {
            if (group.getChildAt(0).getId() == checkedId) {
               responses.add(0); // the first answer was checked
            } else if (group.getChildAt(1).getId() == checkedId) {
               responses.add(1); // the first answer was checked
            } else if (group.getChildAt(2).getId() == checkedId) {
               responses.add(2); // the first answer was checked
            }
      } 
});

标签:populate,android,database,radio-button
来源: https://codeday.me/bug/20191201/2081283.html