Gibbs
Gibbs

Reputation: 22956

Android -get radio button id based on value

I want to highlight right and wrong option when user clicks a button after checking an radio button. If that option is right, highlight. Else highlight right option.

Is there any way to get radio button id in a group based on its value? Or Do I need to use switch case?

I searched enough but not able to find out what I need.

Edit

I have simple layout which contains one question, 4 choices, one button. User check a radio button and click the check button. If user selects wrong option, highlight the correct option. I know what is correct option by value.

choice1, choice2, choice3, choice4 are four radio buttons. User checks choice3. But choice2 is correct. How do I select choice2 by value in this radio group.

  group.getRadioButtonId("choice2")

Anything similar to this?

Upvotes: 0

Views: 951

Answers (5)

earthw0rmjim
earthw0rmjim

Reputation: 19417

You could iterate through the children of your RadioGroup to get the required one:

int count = radioGroup.getChildCount();
for (int i = 0 ; i < count; i++) {
    RadioButton button = (RadioButton) radioGroup.getChildAt(i);
    if (button.getText().equals("choice2")) {
        int id = button.getId(); // the ID you're looking for
    }
}

Upvotes: 1

Akhil Soman
Akhil Soman

Reputation: 2217

Create an int array with all the ids of the radiobutton

int[] rb_IDs=new int[]{R.id.rb1,R.id.rb2,R.id.rb3};

Then inside your button click :

RadioGroup rg=(RadioGroup) findViewById(R.id.rg);
    rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            for (int i=0;i<rb_IDs.length;i++)
            {
                RadioButton rb=(RadioButton)findViewById(rb_IDs[i]);
                if (rb.getText().toString().equals("YOUR CORRECT ANSWER")&&!rb.isChecked())
                {
                    //
                    //Do your thing
                    //

                    //ID of the correct answer Radiobutton is
                    int id=rb_IDs[i];

                    //HighLighting the answer
                    rb.setBackgroundColor(Color.parseColor("#00ff00"));

                    break;
                }
            }
        }
    });

Upvotes: 0

Payal Sorathiya
Payal Sorathiya

Reputation: 244

First check which option is true. hear choice 2 OK. set by default is checked true and than check user checked value . if user select other option than display message and pass true option we already checked true

Upvotes: 0

Rahul Chaudhary
Rahul Chaudhary

Reputation: 1061

you can use these line. its working for me

 int checkedId = radioGroup.getCheckedRadioButtonId();
    View radioButton = radioGroup.findViewById(checkedId);
    int radioId = radioGroup.indexOfChild(radioButton);
    RadioButton btn = (RadioButton) radioGroup.getChildAt(radioId);

Upvotes: 0

anonymous
anonymous

Reputation: 386

You Can check like this

@Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            // TODO Auto-generated method stub

            int rbId = group.getCheckedRadioButtonId();
            RadioButton rb = (RadioButton) findViewById(rbId);
            switch (group.getId()) {
            case R.id.radiogroupID:

                if (rb.getText().toString().equalsIgnoreCase("right")) {
                    // your logic 
                } else {
                    //your logic
                }
            }
        }

Upvotes: 0

Related Questions