Проверьте радио кнопку снова в группе радио Android - PullRequest
1 голос
/ 02 июля 2019

Я использую радиогруппу, содержащую две радиокнопки, как показано ниже:

  <RadioGroup
                    android:layout_width="match_parent"
                    android:layout_marginStart="@dimen/dp_16"
                    android:layout_marginEnd="@dimen/dp_16"
                    android:layout_height="wrap_content"
                    app:layout_constraintTop_toTopOf="parent">


                <RadioButton
                        android:id="@+id/rbDebitCard"
                        android:fontFamily="@font/sf_ui_regular"
                        android:textColor="@color/txt_color_heading"
                        android:layout_width="match_parent"
                        android:drawableEnd="@drawable/debit_card"
                        android:layout_height="wrap_content"
                        android:layout_weight="1"
                        android:text="Pay with Card"/>


                <View
                        android:layout_width="match_parent"
                        android:layout_height="@dimen/dp_1"
                        android:layout_marginTop="@dimen/dp_16"
                        android:background="@color/divider_line"/>

                <RadioButton
                        android:id="@+id/rbCash"
                        android:fontFamily="@font/sf_ui_regular"
                        android:textColor="@color/txt_color_heading"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_weight="1"
                        android:checked="true"
                        android:drawableEnd="@drawable/cash"
                        android:layout_marginTop="@dimen/dp_16"
                        android:text="Cash"/>

            </RadioGroup>

В моем коде kotlin я показываю нижний лист, когда нажата кнопка rbDebitCard, и изменяю проверку с помощью ischecked = false при закрытиинижний лист.которая отлично снимает флажок.

Проблема в том, что, когда я снова нажимаю на ту же кнопку переключателя, она не проверяется.Тем не менее, нижний лист открывается.

Если я нажимаю другую кнопку-переключатель (которая, очевидно, проверяется), а затем снова нажимаю на первую кнопку, выполняется проверка и открытие нижнего листа.Но я снова закрываю нижний лист и нажимаю переключатель, он не проверяется.

Для справки ниже приведен код kotlin:

//pay with card
        rbDebitCard.setOnClickListener {
            rbDebitCard.isChecked = true
            paymentMode = "Card"
            onBraintreeSubmit(clContainer)
        }

        //Cash
        rbCash.setOnClickListener {
            paymentMode = "Cash"
        }

 override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    if (requestCode == BundleConstants.REQ_CODE_PAYMENT) {
        if (resultCode == Activity.RESULT_OK) {
            // use the result to update your UI and send the payment method nonce to your server
            val result: DropInResult = data!!.getParcelableExtra(DropInResult.EXTRA_DROP_IN_RESULT)
            Log.e("payment result nonce", result.paymentMethodNonce?.nonce)

            makePayment(result.paymentMethodNonce?.nonce)
        } else if (resultCode == Activity.RESULT_CANCELED) {
            // the user canceled
            rbDebitCard.isChecked = false
        } else {
            // handle errors here, an exception may be available in
            val error = data!!.getSerializableExtra(DropInActivity.EXTRA_ERROR) as Exception
            rbDebitCard.isChecked = false
        }
    }
}

добавление прослушивателя проверки измененийчтобы радио кнопка выглядела так:

 rgPayment.setOnCheckedChangeListener { group, checkedId ->
        when(checkedId){
            R.id.rbDebitCard->{
                rbDebitCard.isChecked = true
                paymentMode = "Card"
                onBraintreeSubmit(clContainer)
            }

            R.id.rbCash->{
                paymentMode = "Cash"
            }
        }
    }

Ответы [ 2 ]

2 голосов
/ 02 июля 2019

Вы должны взять идентификатор группы радиостанций и использовать радиогруппу проверенного измененного прослушивателя следующим образом -

val checkedRadioButton = group?.findViewById(group.checkedRadioButtonId) as? RadioButton
        checkedRadioButton?.let {

            if (checkedRadioButton.isChecked)
                Toast.makeText(applicationContext, "RadioGroup: ${group?.contentDescription} RadioButton: ${checkedRadioButton?.text}", Toast.LENGTH_LONG).show()
}
1 голос
/ 02 июля 2019

проблема с rbDebitCard.isChecked = false Я заменил это на rgPayment.clearCheck().

С этим я думаю, что радиогруппа должна поддерживать некоторую проверку радиогруппой, которая не зависит от проверки, назначенной радиостанцииКнопка вручную.

Однако эта вещь решила проблему:)

...