Melisa
Melisa

Reputation: 41

Showing text from string through TextView after pressing RadioButton

I'm trying to show automaticly "This is the correct answer" or "Try again" just right after the radio button is pressed.

My question is:

How to add two strings

    <string name="Good_answer">That is the correct answer</string>
<string name="Wrong_answer">Try again</string>

to this textView

<TextView
    android:id="@+id/textViewAnswer"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:textAlignment="center"
    android:layout_below="@id/rg2"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

so I can proceed this

                for (boolean radioAnswer : answer)
                    correct = correct && radioAnswer;
                if (correct)
                    tv.setText(R.string.Good_answer);
                else
                    tv.setText(R.string.Wrong_answer);

And here is setOnClick... (at first it was with checkbutton 'mbuton')

mbuton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            boolean check = true;
            boolean correct = true;
            // To check if all questions have been answered
            for (boolean radioChecked : checked)
                check = check && radioChecked;
            if (check) {

                // To check if all questions have been answered correctly
                for (boolean radioAnswer : answer)
                    correct = correct && radioAnswer;
                if (correct)
                    tv.setText(R.string.Good_answer);
                else
                    tv.setText(R.string.Wrong_answer);

            }
            else
                tv.setText("Answer all questions");
        }
    });

Xml

   <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin">

    <RadioGroup
        android:id="@+id/rg1"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:textColor="@android:color/black"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Question 1"/>

        <RadioButton
            android:text="Correct Option"
            android:id="@+id/radioButton1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />


        <RadioButton
            android:text="Wrong Option"
            android:id="@+id/radioButton2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <RadioButton
            android:text="Wrong Option"
            android:id="@+id/radioButton3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

    </RadioGroup>

    <RadioGroup
        android:layout_marginTop="16dp"
        android:layout_below="@+id/rg1"
        android:id="@+id/rg2"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:textColor="@android:color/black"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Question 2"/>


        <RadioButton
            android:text="Wrong Option"
            android:id="@+id/radioButton4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <RadioButton
            android:text="Correct Option"
            android:id="@+id/radioButton5"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />


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

    <TextView
        android:id="@+id/textViewAnswer"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:textAlignment="center"
        android:layout_below="@id/rg2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

And string

   <string name="Good_answer">That is the correct answer</string>
<string name="Wrong_answer">Try again</string>

Upvotes: 1

Views: 325

Answers (4)

Jaspreet Kaur
Jaspreet Kaur

Reputation: 1720

    // i have modified your code, please check it. 
    // i have display message if user does not select any radio button,
    //another wise it display correct answer count on textview.

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;

import java.util.ArrayList;


public class Main2Activity2 extends Activity {

    TextView tv;
    Button mbuton;
    RadioGroup rg1,rg2;
    ArrayList<Integer> arrayListOfRadioGroupId =new ArrayList<Integer>();
    int noAnswerCount= 0;
    int correctAnswerRadioButtonCount= 0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = (TextView) findViewById(R.id.textViewAnswer);
        mbuton = (Button) findViewById(R.id.mbuton);
        rg1 = (RadioGroup)findViewById(R.id.rg1);
        rg2 = (RadioGroup)findViewById(R.id.rg2);

        // Store Radio group id to arraylist
        arrayListOfRadioGroupId.add(rg1.getId());
        arrayListOfRadioGroupId.add(rg2.getId());

        mbuton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                noAnswerCount= 0;
                correctAnswerRadioButtonCount= 0;

                for(int radioGroupId: arrayListOfRadioGroupId)
                {
                    RadioGroup objRadioGroup = (RadioGroup) findViewById(radioGroupId);
                    int checkedId=objRadioGroup.getCheckedRadioButtonId();
                    // get Selected Radio button id.

                    if(checkedId>-1) {
                        RadioButton rB = (RadioButton) findViewById(checkedId);
                        String strRadioButtonText = rB.getText().toString();
                        // get Selected Radio button Text.
                        if(strRadioButtonText.equals("Correct Option"))
                        {
                            correctAnswerRadioButtonCount ++;
                            noAnswerCount --;
                        }
                    }
                    else
                    {
                        noAnswerCount++;
                    }
                }

                if(noAnswerCount > 0)
                {
                    tv.setText("Answer all questions");
                }
                else
                {
                    tv.setText("Correct Answer Count is: " +correctAnswerRadioButtonCount);
                }
            }
        });

        rg2.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {

                if (checkedId == R.id.radioButton5) {
                    RadioButton rB = (RadioButton) findViewById(checkedId);

                    String strRadioButtonText = rB.getText().toString();
                    // get Selected Radio button Text.
                    if(strRadioButtonText.equals("Correct Option")) {
                        tv.setText("Correct Answer");
                    }
                    else
                    {
                        tv.setText("Wrong Answer");
                    }
                }

            }
        });
    }
}


        // my Xml code is.
        <?xml version="1.0" encoding="utf-8"?>
        <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                            android:id="@+id/activity_main"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:paddingBottom="@dimen/activity_vertical_margin"
                            android:paddingLeft="@dimen/activity_horizontal_margin"
                            android:paddingRight="@dimen/activity_horizontal_margin"
                            android:paddingTop="@dimen/activity_vertical_margin">

                <RadioGroup
                    android:id="@+id/rg1"
                    android:orientation="vertical"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content">

                    <TextView
                        android:textColor="@android:color/black"
                        android:textAppearance="?android:attr/textAppearanceMedium"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="Question 1"/>

                    <RadioButton
                        android:text="Correct Option"
                        android:id="@+id/radioButton1"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content" />


                    <RadioButton
                        android:text="Wrong Option"
                        android:id="@+id/radioButton2"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content" />

                    <RadioButton
                        android:text="Wrong Option"
                        android:id="@+id/radioButton3"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content" />

                </RadioGroup>

                <RadioGroup
                    android:layout_marginTop="16dp"
                    android:layout_below="@+id/rg1"
                    android:id="@+id/rg2"
                    android:orientation="vertical"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content">

                    <TextView
                        android:textColor="@android:color/black"
                        android:textAppearance="?android:attr/textAppearanceMedium"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="Question 2"/>


                    <RadioButton
                        android:text="Wrong Option"
                        android:id="@+id/radioButton4"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content" />

                    <RadioButton
                        android:text="Correct Option"
                        android:id="@+id/radioButton5"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content" />


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

                <TextView
                    android:id="@+id/textViewAnswer"
                    android:textAppearance="?android:attr/textAppearanceLarge"
                    android:textAlignment="center"
                    android:layout_below="@id/rg2"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content" />

            <Button
                android:id="@+id/mbuton"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="MButton"
                android:layout_below="@id/textViewAnswer"/>
        </RelativeLayout>

Upvotes: 1

Niraj Niroula
Niraj Niroula

Reputation: 2424

Layout file; look at those questions and answers. I've hardcoded the string here. You can set it in string resource file and fetch it here using @string or set it dynamically using yourTextView.setText() method.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin">

<RadioGroup
    android:id="@+id/rg1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="What is your name?"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textColor="@android:color/black" />

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


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

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

</RadioGroup>

<RadioGroup
    android:id="@+id/rg2"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/rg1"
    android:layout_marginTop="16dp"
    android:orientation="vertical">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="What are you learning?"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textColor="@android:color/black" />


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

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


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

<TextView
    android:id="@+id/textViewAnswer"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/rg2"
    android:textAlignment="center"
    android:textAppearance="?android:attr/textAppearanceLarge" />

And in your activity.

public class MainActivity extends AppCompatActivity {

private RadioGroup radioGroupFirst, radioGroupSecond;
private String[] realAnswers = {"Melisa", "Android"};
private String[] userAnswers;
private TextView tv;
private boolean status = true;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    radioGroupFirst = (RadioGroup) findViewById(R.id.rg1);
    radioGroupSecond = (RadioGroup) findViewById(R.id.rg2);
    tv = (TextView) findViewById(R.id.textViewAnswer);
    userAnswers = new String[2];

    radioGroupFirst.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {

            tv.setText("");
            RadioButton nameRadio = (RadioButton) findViewById(checkedId);
            Log.e("ID", "" + nameRadio.getText().toString());
            userAnswers[0] = nameRadio.getText().toString();
        }
    });

    radioGroupSecond.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {

            RadioButton learningRadio = (RadioButton) findViewById(checkedId);
            Log.e("ID", "" + learningRadio.getText().toString());
            userAnswers[1] = learningRadio.getText().toString();
            if (checkStatus(userAnswers))
                tv.setText(getString(R.string.Good_answer));
            else
                tv.setText(getString(R.string.Wrong_answer));

        }
    });
}

private boolean checkStatus(String[] userAnswers) {
    status = true;
    for (int i = 0; i < userAnswers.length; i++) {
        Log.e(userAnswers[i], realAnswers[i]);
        if (!userAnswers[i].equals(realAnswers[i]))
            status = false;
    }
    return status;
  }
}

I haven't use the string resources here, if you want to set the text view with the string from resources too, look it in my first answer. So, I think this will help you.

Upvotes: 0

BackStabber
BackStabber

Reputation: 227

The Code is still unclear (I can't Figure out what mButton is) . However can you also share your layout xml I would suggest having a Radio Group comprising of X number of Radio Buttons (options) that you like and put the on checkedChangeListener

<RadioGroup
    android:id="@+id/rgroup"
    android:layout_width="fill_parent"
    android:layout_height="45dp"
    android:background="@drawable/background"
    android:gravity="center"
    android:orientation="horizontal" >

    <RadioButton
        android:id="@+id/option1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dp"
        android:background="@drawable/test_image"
        android:button="@null" />

 <RadioButton
        android:id="@+id/option2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dp"
        android:background="@drawable/test_image"
        android:button="@null" />


</RadioGroup>

Your Activity should implement the OnCheckedChangeListener and you can then define your Radio Group RadioGroup Options = (RadioGroup) findViewById(R.id.rgroup);

Then you can implement a method in your activity where if a option inside that Radio Button is clicked you can use the below method.

 @Override
public void onCheckedChanged(RadioGroup group,
                             int checkedId)
{
    switch (checkedId)
    {
        case R.id.option1:
           // settextview to correct here
            break;
        case R.id.option2:
           //set textview to wrong here
            break;

        default:
            break;
    }

}

Assuming you might have answers at dynamic positions you might want to code some logic in the on checked change method . Hope this helps

Upvotes: 0

Niraj Niroula
Niraj Niroula

Reputation: 2424

If your problem is just about setting those string in the TextView then, try this:

//For correct answer.
String CorrectAnswer = getString(R.string.Good_answer);
tv.setText(CorrectAnswer);

//For wrong answer.
String WrongAnswer = getString(R.string.Wrong_answer);
tv.setText(WrongAnswer);

Upvotes: 0

Related Questions