Android радиокнопка множественный выбор - PullRequest
0 голосов
/ 24 февраля 2020

Короче говоря. Я создаю радио кнопки внутри группы радио. Я сделаю фильтрацию для моей таблицы в зависимости от того, что выберет пользователь. У меня установлен один переключатель по умолчанию. Поэтому, когда я пытаюсь проверить другую кнопку, она остается проверенной. На самом деле обе кнопки проверяются. Это так странно. Может быть, это происходит потому, что я делаю все программно. Дизайн все еще продолжается. Я просто остановился здесь, потому что я не знаю, визуальная ошибка или нет. Я использую Kotlin для android developmnt.

Кнопки дисплея:

    private fun displayChoices(choices: List<FiltersList.Choice>, multipleChoice: Boolean) {
        val radioGroup = RadioGroup(this)
        for (choice in choices) {
            val button = if (multipleChoice) {
                CheckBox(this)
            } else {
                RadioButton(this)
            }

            button.apply {
                layoutParams = LinearLayout.LayoutParams(
                    LinearLayout.LayoutParams.WRAP_CONTENT,
                    LinearLayout.LayoutParams.WRAP_CONTENT).apply {
                    setMargins(16, 8, 16, 8)
                }
                text = choice.display
                isChecked = choice.selected
                setTextColor(ResourcesCompat.getColor(resources, R.color.colorTextClicked, null))
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                    buttonTintList = ColorStateList.valueOf(ResourcesCompat.getColor(resources, R.color.colorButton, null))
                }
            }
            radioGroup.addView(button)
        }
        filters_content.addView(radioGroup)
    }

Моя раскладка:

<androidx.coordinatorlayout.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:background="@color/colorFilterBoxBackground"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".FilterDialogActivity">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <LinearLayout
            android:id="@+id/filters_content"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_behavior="@string/appbar_scrolling_view_behavior"
            android:orientation="vertical">

        </LinearLayout>

    </ScrollView>

</androidx.coordinatorlayout.widget.CoordinatorLayout>

Вид: Problem looks like this

Я выбираю кнопку Любая дата программно, и она остается выбранным. Я получаю данные с сервера, какие элементы нужно выбрать по умолчанию.

1 Ответ

1 голос
/ 24 февраля 2020

Хорошо, сначала я подумал, что это потому, что вы настраивали другие представления внутри radioGroup, так как radioButtons должен быть прямым потомком. Но здесь дело не в этом. Проблема в том, что при создании radioButtons внутри radioGroup программно необходимо назначить определенные c идентификаторы для каждого radioButton.

Не нашел do c, но Я предполагаю, что радиогруппа использует идентификаторы кнопок, чтобы сделать взаимоисключающие. Столь простое решение - установить id для каждого создаваемого радио-кнопки. Что касается используемого вами идентификатора, то это то, что упоминает do c.

Идентификатор не обязательно должен быть уникальным в этом представлении. иерархия. Идентификатор должен быть положительным числом.

Если его ввести Java, вы можете использовать button.setId(choices.indexOf(choice)+1001);. Я не очень хорош с Kotlin, но я думаю, что Kotlin эквивалент будет

id = choices.indexOf(choice) + 1001 //where 1001 i just a random int I used to try avoid conflict

Установите идентификатор для кнопок, и это должно решить вашу проблему. Удачи.

...