как сделать так, чтобы радиокнопка вне радиогруппы автоматически отключалась при проверке радиокнопки на первой радиогруппе? - PullRequest
1 голос
/ 09 апреля 2019

У меня есть такой случай, у меня есть таблица, в которой есть 4 радиогруппы, каждая радиогруппа которых имеет 2 радиокнопки. Как сделать так, чтобы 4 радиогруппы синхронизировались друг с другом. Когда радиокнопка в радиогруппе 1 проверена, радиокнопка в радиогруппе 2 не проверена?

Это мой XML-код:

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">

<TextView
    android:layout_margin="20sp"
    android:textSize="25sp"
    android:fontFamily="monospace"
    android:layout_gravity="center_horizontal"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/judulkolomtes"/>

<TableLayout
    android:layout_margin="10sp"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TableRow
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:background="@drawable/border_white">

        <RadioGroup
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:orientation="horizontal">
        <TextView
            android:padding="10sp"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:text="@string/P"
            android:textStyle="bold"
            android:textAlignment="center"
            android:textSize="18sp"
            android:textColor="@color/white"/>

        <TextView
            android:padding="10sp"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:text="@string/K"
            android:textStyle="bold"
            android:textAlignment="center"
            android:textSize="18sp"
            android:textColor="@color/white"/>
        </RadioGroup>

        <TextView
            android:padding="10sp"
            android:layout_height="match_parent"
            android:layout_width="match_parent"
            android:text="@string/pernyataanhead"
            android:textStyle="bold"
            android:textSize="18sp"
            android:textColor="@color/white"/>

    </TableRow>

    <TableRow
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:background="@drawable/border_black">

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

            <RadioButton
                android:id="@+id/Pradio1"
                android:checked="false"
                android:layout_gravity="center"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:background="@drawable/border_black"/>

            <RadioButton
                android:id="@+id/Kradio1"
                android:layout_gravity="center"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:background="@drawable/border_black"/>
        </RadioGroup>
        <TextView
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:paddingTop="2dp"
            android:text="@string/pernyataan1"
            android:textSize="19sp"
            android:textColor="@color/black"/>
    </TableRow>

    <TableRow
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/border_black"
        android:orientation="horizontal">

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

        <RadioButton
            android:layout_gravity="center"
            android:id="@+id/Pradio2"
            android:checked="false"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:background="@drawable/border_black"/>

        <RadioButton
            android:layout_gravity="center"
            android:id="@+id/Kradio2"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:background="@drawable/border_black"/>
        </RadioGroup>
        <TextView
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:paddingTop="2dp"
            android:text="@string/pernyataan2"
            android:textSize="19sp"
            android:textColor="@color/black"/>
    </TableRow>

    <TableRow
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:background="@drawable/border_black">

        <RadioGroup
            android:layout_height="match_parent"
            android:layout_width="wrap_content"
            android:orientation="horizontal">

        <RadioButton
            android:id="@+id/Pradio3"
            android:layout_gravity="center"
            android:checked="false"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:background="@drawable/border_black"/>

        <RadioButton
            android:id="@+id/Kradio3"
            android:layout_gravity="center"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:background="@drawable/border_black"/>
        </RadioGroup>

        <TextView
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:paddingTop="2dp"
            android:text="@string/pernyataan3"
            android:textSize="19sp"
            android:textColor="@color/black"/>
    </TableRow>

    <TableRow
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:background="@drawable/border_black">

        <RadioGroup
            android:layout_height="match_parent"
            android:layout_width="wrap_content"
            android:orientation="horizontal">

        <RadioButton
            android:id="@+id/Pradio4"
            android:layout_gravity="center"
            android:checked="false"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:background="@drawable/border_black"/>

        <RadioButton
            android:id="@+id/Kradio4"
            android:layout_gravity="center"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:background="@drawable/border_black"/>
        </RadioGroup>

        <TextView
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:paddingTop="2dp"
            android:text="@string/pernyataan4"
            android:textSize="19sp"
            android:textColor="@color/black"/>
    </TableRow>
</TableLayout>

Я пытался использовать этот код:

List<RadioButton> radioButtons = new ArrayList<RadioButton>();
    radioButtons.add( (RadioButton)findViewById(R.id.Pradio1) );
    radioButtons.add( (RadioButton)findViewById(R.id.Pradio2) );
    radioButtons.add( (RadioButton)findViewById(R.id.Pradio3) );

    for (RadioButton button : radioButtons){

        button.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) processRadioButtonClick(buttonView);
            }
        });
    }

private void processRadioButtonClick(CompoundButton buttonView){

    for (RadioButton button : radioButtons){

        if (button != buttonView ) button.setChecked(false);
    }

}

но результаты оказались не такими, как я ожидал. когда я проверял радиокнопку в радиогруппе 1, то я проверял радиокнопку в радиогруппе 2. радиокнопка в радиогруппе 1 стала непроверенной, но когда я захотел снова проверить радиокнопку в радиогруппе 1, радиокнопка не могла быть проверена, в том числе с радиокнопкой в ​​радиогруппе 2 , Есть ли решение этой проблемы? основываясь на моем анализе, сделав радиокнопку ложной, когда проверяется другая радиокнопка, это приводит к невозможности проверки радиокнопки.

1 Ответ

0 голосов
/ 10 апреля 2019

Вот решение.

public class MainActivity extends AppCompatActivity {
    List<RadioButton> radioButtons;
    List<RadioGroup> radioGroups;

    boolean flg = false;

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

        final RadioButton pradio1 = (RadioButton) findViewById(R.id.Pradio1);
        final RadioButton pradio2 = (RadioButton) findViewById(R.id.Pradio2);
        final RadioButton pradio3 = (RadioButton) findViewById(R.id.Pradio3);
        final RadioButton pradio4 = (RadioButton) findViewById(R.id.Pradio4);
        final RadioButton kradio1 = (RadioButton) findViewById(R.id.Kradio1);
        final RadioButton kradio2 = (RadioButton) findViewById(R.id.Kradio2);
        final RadioButton kradio3 = (RadioButton) findViewById(R.id.Kradio3);
        final RadioButton kradio4 = (RadioButton) findViewById(R.id.Kradio4);
        final RadioGroup rgroup1 =  (RadioGroup) findViewById(R.id.Rgroup1);
        final RadioGroup rgroup2 = (RadioGroup) findViewById(R.id.Rgroup2);
        final RadioGroup rgroup3 = (RadioGroup) findViewById(R.id.Rgroup3);
        final RadioGroup rgroup4 = (RadioGroup) findViewById(R.id.Rgroup4);

        radioButtons = new ArrayList<RadioButton>();
        radioButtons.add(pradio1);
        radioButtons.add(pradio2);
        radioButtons.add(pradio3);
        radioButtons.add(pradio4);
        radioButtons.add(kradio1);
        radioButtons.add(kradio2);
        radioButtons.add(kradio3);
        radioButtons.add(kradio4);

        radioGroups = new ArrayList<RadioGroup>();
        radioGroups.add(rgroup1);
        radioGroups.add(rgroup2);
        radioGroups.add(rgroup3);
        radioGroups.add(rgroup4);

        Log.e("JK->",""+ ((RadioGroup) pradio1.getParent()).getId());

        for (RadioButton button : radioButtons) {
            button.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    if (isChecked) {
                        Log.e("JK->","JK");
                        processRadioButtonClick(buttonView);
                    }

                }
            });
        }
    }

    private void processRadioButtonClick(CompoundButton buttonView) {
        for (RadioGroup radioGroup: radioGroups){
            if (radioGroup.getId() != ((RadioGroup) buttonView.getParent()).getId()) {
                radioGroup.clearCheck();
            }
        }
    }
}

Что пошло не так в вашем коде.

Нет способа снять отметку RadioButton в Android. Вы пытались снять отметку RadioButton, используя setChecked (false). Это было нехорошо во внутренних классах (RadioButton Class of Android). Это было отключение переключателя визуально, но не логически (My Own, хотя из поведения RadioButton). Вот почему ваш код не работает.

Объяснение решения.

Для решения этой проблемы вместо снятия флажка RadioButton с помощью setChecked (false) я использовал radioGroup.clearCheck(), который снимает флажки с обеих кнопок (визуально и логически обеих) этой конкретной группы. Я не уверен, что это четкое объяснение или нет. Дайте знать, если у вас появятся вопросы. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...