由于一些奇怪的原因,每次单击MaterialButtonToggleGroup
中的任何按钮时,addOnButtonCheckedListener
都会被调用两次。下面是我的XML
<ScrollView 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:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="5dp"
tools:context=".ui.UserCartCheckout">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="vertical"
android:padding="5dp">
<com.google.android.material.button.MaterialButtonToggleGroup
android:id="@+id/btgTest"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
app:checkedButton="@id/btnTest1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:singleSelection="true"
app:selectionRequired="true">
<com.google.android.material.button.MaterialButton
android:id="@+id/btnTest1"
style="?attr/materialButtonOutlinedStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/Cash"
app:icon="@drawable/cash"
app:iconGravity="textStart"
android:enabled="true" />
<com.google.android.material.button.MaterialButton
android:id="@+id/btnTest2"
style="?attr/materialButtonOutlinedStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/Pay_With_Stripe"
app:icon="@drawable/contactless_payment"
app:iconGravity="textStart"
android:enabled="true" />
</com.google.android.material.button.MaterialButtonToggleGroup>
</androidx.appcompat.widget.LinearLayoutCompat>
</ScrollView>
下面是代码
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.btgTest.addOnButtonCheckedListener { group, checkedId, isChecked ->
Timber.d("imini 177 isChecked: $isChecked")
if (isChecked) {
when (checkedId){
R.id.btnTest1 -> Timber.d("1 is checked")
R.id.btnTest2 -> Timber.d("2 is checked")
}
}else{
Timber.d("imini 184")
}
}
}
每次我点击顶部按钮btnTest1
我的logcat将输出
imini 177 isChecked: true
1 is checked
imini 177 isChecked: false
imini 184
每次我点击底部的按钮btnTest2
我的logcat将输出
imini 177 isChecked: false
imini 184
imini 177 isChecked: true
2 is checked
因此,正如您所看到的,不仅addOnButtonCheckedListener
在每次单击其中的任何按钮时调用两次,而且当我单击顶部按钮时,它总是会被标记为not checked
。为什么?
1条答案
按热度按时间2ul0zpep1#
当您使用分组切换构件时,回调实现是正确的,因为:
1.当选中/取消选中任何项时,将触发回调
1.这是因为这是一个单一的选择切换组
1.当您选择
Stripe
时,Cash
项将被取消选中,这将触发另一个回调调用,并使用更新后的值isChecked
。如果您只想查看选中的项目,请执行以下操作: