Невозможно обработать выбор радиокнопок

Я создал приложение MCQs с четырьмя радиокнопками в радиогруппе. Проблема в том, что я хочу выбрать одну радиокнопку и отключить выбор трех других радиокнопок в это время. Только одна радиокнопка выбирает и отключает выбор других радиокнопок. Пожалуйста, помогите мне: я буду вам всем очень благодарен.

----------

Xml File

 <RadioGroup
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/radioGroup1">
//These are four radio buttons from which i have to select one radio button and selection of other three radio buttons must be disabled.
        <RadioButton
            android:id="@+id/choice1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="5dp"
            android:background="@android:color/darker_gray"
            android:gravity="left|center_vertical"
            android:onClick="onClick"
            android:padding="4dp"
            android:text="A"
            android:textColor="#000000"
            android:textSize="16dp" />

    <RadioButton
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="B"
        android:onClick="onClick"
        android:background="@android:color/darker_gray"
        android:textColor="#000000"
        android:padding="4dp"
        android:textSize="16dp"
        android:gravity="left|center_vertical"
        android:layout_marginBottom="5dp"
        android:id="@+id/choice2"/>

    <RadioButton
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="C"
        android:onClick="onClick"
        android:background="@android:color/darker_gray"
        android:textColor="#000000"
        android:padding="4dp"
        android:textSize="16dp"
        android:gravity="left|center_vertical"
        android:layout_marginBottom="5dp"
        android:id="@+id/choice3"/>

    <RadioButton
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="D"
        android:onClick="onClick"
        android:background="@android:color/darker_gray"
        android:textColor="#000000"
        android:padding="4dp"
        android:textSize="16dp"
        android:gravity="left|center_vertical"
        android:layout_marginBottom="5dp"
        android:id="@+id/choice4" />
</RadioGroup>

----------

Java File:
 mQuestionView = (TextView) findViewById(R.id.question);
        mButtonChoice1 = (RadioButton) findViewById(R.id.choice1);
        mButtonChoice2 = (RadioButton) findViewById(R.id.choice2);
        mButtonChoice3 = (RadioButton) findViewById(R.id.choice3);
        mButtonChoice4 = (RadioButton) findViewById(R.id.choice4);
 }
  //Java file with only onclick button code:
 public void onClick(View view) {
            Button answer = (Button) view;
            // Is the button now checked?
            //here must be the code of my problem
        }

person Android Learner 541    schedule 01.12.2017    source источник


Ответы (2)


Я не совсем уверен, что вы просите, но я думаю, что это решение:

public void onClick(View view)
{
    ArrayList<Integer> ids = new ArrayList<Integer>();
    ids.add(mButtonChoice1.getId());
    ids.add(mButtonChoice2.getId());
    ids.add(mButtonChoice3.getId());
    ids.add(mButtonChoice4.getId());
    for(Integer i : ids)
    {
        if(i!= view.getId())
            ((RadioButton) findViewById(i)).setEnabled(false);
    }
}
person irdkwmnsb    schedule 01.12.2017
comment
Он работает, но когда я нажимаю на следующий вопрос, переключатели не сбрасываются, он сохраняет свои изменения из предыдущего вопроса mcq. - person Android Learner 541; 02.12.2017
comment
что делать ? с этим - person Android Learner 541; 02.12.2017
comment
Что ж, вы должны добавить эти строки в свое мероприятие, отвечая на следующий вопрос: ArrayList<Integer> ids = new ArrayList<Integer>(); ids.add(mButtonChoice1.getId()); ids.add(mButtonChoice2.getId()); ids.add(mButtonChoice3.getId()); ids.add(mButtonChoice4.getId()); for(Integer i : ids) { ((RadioButton) findViewById(i)).setEnabled(true); } - person irdkwmnsb; 06.12.2017

Для отключения RadioGroup попробуйте код ниже. Если не работает, попробуйте зациклить.

RadioGroup radioGroup = (RadioGroup)findViewById (R.id.radioGroup1);
radioGroup.setOnCheckedChangedListener (new OnCheckedChangedListener(){
public void onCheckedChanged(RadioGroup group, int checkedId) 
{
  if (checkedId == R.id.choice1)
    group.setEnabled(false);
}else if(/*other conditions here*/)
});

Если setEnabled() не работает, попробуйте изменить код, чтобы он проходил через каждый RadioButton при проверке radio0:

if (checkedId == R.id.choice1){

   //radio0 is checked save the data

   for(int i = 0; i < group.getChildCount(); i++){
            ((RadioButton)rg1.getChildAt(i)).setEnabled(false);
        }
}else if(/*other conditions here*/){

       for(int i = 0; i < group.getChildCount(); i++){
            ((RadioButton)rg1.getChildAt(i)).setEnabled(false);
        }
 }
person Tomin B Azhakathu    schedule 01.12.2017
comment
что я здесь положил? если (checkedId == R.id.radio0) radio0 нет в моем коде? - person Android Learner 541; 01.12.2017
comment
radio0 - ваш выбор1; я изменил код. просто проверь это - person Tomin B Azhakathu; 01.12.2017
comment
Я должен сделать этот код со всеми четырьмя вариантами выбора, выбором1, выбором2, выбором3 и выбором4 отдельно? - person Android Learner 541; 02.12.2017
comment
Вы также можете использовать if (checkedId == R.id.choice1 || checkedId == R.id.choice2 || checkedId == R.id.choice3 || checkedId == R.id.choice4). Используя Or, вы можете добиться того же за один цикл - person Tomin B Azhakathu; 02.12.2017