Как программно проверить переключатель в динамической радиогруппе?

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

Затем, когда я выберу какую-нибудь другую радиокнопку из радиогруппы, выбор будет отменен.

Вот мой код:

for (x in taskTypes) {
        var radioButton = RadioButton(context)
        radioButton.setOnCheckedChangeListener { button: CompoundButton?, b: Boolean  ->
            if (b) {
                ......

            }
        }

        taskRadioGroup.addView(radioButton)
    }

динамически добавляются ли радиокнопки ??

Venky 24.04.2018 12:23

Да! Как я показал в своем коде.

Farwa 24.04.2018 12:23

пожалуйста, проверьте мое решение ниже

ariefbayu 24.04.2018 14:22
1
3
3 031
5

Ответы 5

Если вы используете radioGroup, ранее выбранный radioButton должен быть автоматически отменен. Если вы хотите, чтобы при запуске активности был выбран конкретный radioButton, вам просто нужно добавить следующую строку в onCreate():

yourDesiredRadioButton.isChecked = true;
previously selected radioButton should be automatically deselected -> Я тоже так думаю, но мой личный тест не согласен с этим предположением ... Не уверен, почему ...
ariefbayu 24.04.2018 14:27

@ariefbayu Это происходит, когда radioButton генерируются программно? Как вы тогда ее решили? Один из вариантов может заключаться в том, чтобы вручную установить для isChecked значение false для всех остальных radiobutton.

tahsinRupam 24.04.2018 14:37

проверьте мой ответ, это от check, используя radioGroup вместо самой кнопки ...

ariefbayu 24.04.2018 14:49

Вы можете использовать метод setTag();, чтобы обеспечить уникальную идентификацию для всех кнопок в вашей группе и проверить / изменить свойства, проверив их теги с помощью getTag().

Если вы хотите выбрать первый RadioButton для выбора, вы можете сделать это:

var isChecked = true;

for (x in taskTypes) {
    var radioButton = RadioButton(context)

    if (isChecked){
        isChecked = false;
        radioButton.checked = true;
     }

    taskRadioGroup.addView(radioButton)
}

 taskRadioGroup.setOnCheckedChangeListener { button: CompoundButton?, b: Boolean  ->
        if (b) {
            ......

        }
    }

Он остается проверенным все время, даже если я нажимаю другую кнопку

Farwa 24.04.2018 13:10

taskRadioGroup относится к типу RadioGroup?

M.Waqas Pervez 24.04.2018 13:39

Да, это основная RadioGroup, в которую добавляются все виды переключателей.

Farwa 24.04.2018 13:46

это, вероятно, связано с тем, что вы устанавливаете слушателя checkedChange на отдельную радиокнопку, а не на весь RadioGroup. Попробуйте отредактированный ответ.

M.Waqas Pervez 24.04.2018 14:09

Я хочу, чтобы один из них был выбран при первом запуске приложения

При создании метода

 hardradioButton!!.isChecked = true

сделай слушателем своего радиоГруппа При создании метода

 radioGroup!!.setOnCheckedChangeListener(this)

реализовать OnCheckedChangeListener

override fun onCheckedChanged(group: RadioGroup, checkedId: Int) {
        when (checkedId) {
            R.id.hard_radiobuttonm -> {
                //do whatever
            }

            R.id.ok_radiobuttonm -> {
               //do whatever
            }

            R.id.easy_radiobuttonm -> {
               //do whatever
            }


            else -> {
            }
        }

    }

Я не уверен, почему он всегда check первым RadioButton, даже когда ВСЕ радио добавлено внутри RadioGroup. Мой тест также подтвердил вашу ошибку (возможно, не ошибку, просто не знаю почему).

Вот мое решение вашей проблемы:

var radioGroup = RadioGroup(applicationContext)

for (i: Int in 0..4){
    var radio = RadioButton(applicationContext)
    radio.setText("button position ${i+1}")

    radioGroup.addView(radio)
    Log.d("LOG", "Working on radio ${i+1}")
}

radioGroup.check(0)

linearParent.addView(radioGroup)

Заметил, как я установил первое радио, выполнив check(0) из radioGroup. Это потому, что всякий раз, когда я устанавливаю if из самого radio, это радио всегда будет в состоянии checked:

//this code I placed inside for loop is somewhat broken...
if (i == 0){
    radio.isChecked = true
}

Другие вопросы по теме