У меня есть список переключателей. Я хочу, чтобы один из них был выбран при первом запуске приложения.
Затем, когда я выберу какую-нибудь другую радиокнопку из радиогруппы, выбор будет отменен.
Вот мой код:
for (x in taskTypes) {
var radioButton = RadioButton(context)
radioButton.setOnCheckedChangeListener { button: CompoundButton?, b: Boolean ->
if (b) {
......
}
}
taskRadioGroup.addView(radioButton)
}
Да! Как я показал в своем коде.
пожалуйста, проверьте мое решение ниже
Если вы используете radioGroup, ранее выбранный radioButton должен быть автоматически отменен. Если вы хотите, чтобы при запуске активности был выбран конкретный radioButton, вам просто нужно добавить следующую строку в onCreate():
yourDesiredRadioButton.isChecked = true;
previously selected radioButton should be automatically deselected -> Я тоже так думаю, но мой личный тест не согласен с этим предположением ... Не уверен, почему ...
@ariefbayu Это происходит, когда radioButton генерируются программно? Как вы тогда ее решили? Один из вариантов может заключаться в том, чтобы вручную установить для isChecked значение false для всех остальных radiobutton.
проверьте мой ответ, это от check, используя radioGroup вместо самой кнопки ...
Вы можете использовать метод 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) {
......
}
}
Он остается проверенным все время, даже если я нажимаю другую кнопку
taskRadioGroup относится к типу RadioGroup?
Да, это основная RadioGroup, в которую добавляются все виды переключателей.
это, вероятно, связано с тем, что вы устанавливаете слушателя checkedChange на отдельную радиокнопку, а не на весь RadioGroup. Попробуйте отредактированный ответ.
Я хочу, чтобы один из них был выбран при первом запуске приложения
При создании метода
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
}
динамически добавляются ли радиокнопки ??