Получить идентификатор выбранного RadioButton в RadioGroup - PullRequest
0 голосов
/ 03 февраля 2019

У меня есть RadioGroup примерно так:

    <RadioGroup android:layout_width="wrap_content" android:layout_height="wrap_content"
                app:layout_constraintTop_toBottomOf="@+id/player_age"
                android:id="@+id/gender"
                android:layout_marginStart="8dp" app:layout_constraintStart_toStartOf="parent"
                android:layout_marginEnd="8dp" app:layout_constraintEnd_toEndOf="parent"
                android:layout_marginTop="18dp">
        <RadioButton
                android:text="Male"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" tools:layout_editor_absoluteY="328dp"
                tools:layout_editor_absoluteX="58dp" android:id="@+id/male"/>
        <RadioButton
                android:text="Female"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" tools:layout_editor_absoluteY="328dp"
                tools:layout_editor_absoluteX="224dp" android:id="@+id/radioButton4"/>
    </RadioGroup>

Я просмотрел документы RadioGroup и getCheckedRadioButtonId, кажется, наиболее подходящая функция дляuse:

Возвращает идентификатор выбранной радиокнопки в этой группе.При пустом выборе возвращаемое значение равно -1.

Однако он возвращает бесполезный Int, а не идентификатор RadioButton:

    import kotlinx.android.synthetic.main.activity_player_details.*

    override fun onClick(v: View?) {
        val name: String = player_name.text.toString()
        val age: Int = player_age.text.toString().toInt()
        val gender: Int = gender.checkedRadioButtonId
        println(name)
        println(age)
        println(gender) // prints 2131361895
    }
}

Любая идея, какЯ могу получить фактические id проверенных RadioButton?

Ответы [ 2 ]

0 голосов
/ 03 февраля 2019
  override fun onClick(v: View?) {

       if(radioGroup.getCheckedRadioButtonId() == findViewById(R.id.YOUR_RADIO_BUTTON).getId()) 
       { 
          //TODO  
       }

    val name: String = player_name.text.toString()
    val age: Int = player_age.text.toString().toInt()
    val gender: Int = gender.checkedRadioButtonId
    println(name)
    println(age)
    println(gender) // prints 2131361895
}
}

Эта строка кода поможет вам с проблемой.Что он делает, так это то, что getCheckRadioButtonId() возвращает идентификатор, который был связан с определенной вами переключателем, и сравнивает его с ID , который вы указали в файле XML .

0 голосов
/ 03 февраля 2019

В файле макета атрибут android:id="@+id/male" означает «используйте константу id с именем« male »и создайте ее, если она не существует».Это приводит к генерации int в классе R.java R.id;если вы посмотрите на фактическое значение поля R.id.male, вы увидите, что это какое-то, казалось бы, случайное число.

Когда вы используете R.id.male из кода Java, вы на самом деле просто используете некоторыеint значение.Поэтому, когда вы получаете проверенный идентификатор и распечатываете его, имеет смысл увидеть «случайное» число.

Однако вы можете преобразовать число обратно в String, представляющее имя, используя Resources.getResourceEntryName() метод:

val genderId = gender.checkedRadioButtonId // R.id.male, int value 2131361895
val genderString = resources.getResourceEntryName(genderId) // "male"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...