选择器不响应点击事件

时间:2018-12-10 18:17:02

标签: android android-layout android-databinding

我试图理解为什么

<Button
            android:id="@+id/partTime"
            style="@style/FilterFragment.JobTypeButton"
            android:layout_marginStart="8dp"
            android:onClick="@{(view) -> vm.updateJobType(view.getId())}"
            android:text="@string/part_time"
            app:layout_constraintStart_toEndOf="@+id/fullTime"
            app:layout_constraintTop_toTopOf="@+id/fullTime" />

具有样式

<style name="FilterFragment"/>
<style name="FilterFragment.JobTypeButton" parent="TextLittleButtonWhite">
    <item name="android:layout_width">wrap_content</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:background">@drawable/background_job_type</item>
    <item name="android:padding">8dp</item>
    <item name="android:drawableLeft">@drawable/add</item>
    <item name="android:drawablePadding">8dp</item>
    <item name="android:textAllCaps">false</item>
</style>

背景是选择器

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/background_job_type_selected" android:state_pressed="true" android:state_selected="true" />
<item android:drawable="@drawable/background_job_type_selected" android:state_pressed="true" />
<item android:drawable="@drawable/background_job_type_selected" android:state_selected="true" />
<item android:drawable="@drawable/background_job_type_unselected" />

在被选择时不会更新。我找不到其中的任何错误,如果选择一个按钮,销毁片段,然后返回原始片段,则会显示适当的背景。为什么选择按钮后背景没有更新?

1 个答案:

答案 0 :(得分:0)

解决方案是创建

@BindingAdapter("selected")
fun Button.select(selected: Boolean) {
    isSelected = selected
}

并将其添加到按钮中(底部属性)

<Button
            android:id="@+id/partTime"
            style="@style/FilterFragment.JobTypeButton"
            android:layout_marginStart="8dp"
            android:onClick="@{(view) -> vm.updateJobType(view.getId())}"
            android:text="@string/part_time"
            app:layout_constraintStart_toEndOf="@+id/fullTime"
            app:layout_constraintTop_toTopOf="@+id/fullTime"
            app:selected="@{vm.isPartTime}" />

onClick在我的视图模型中更新isPartTimeapp:selected对此进行了观察。 vm.isPartTime将我的视图模型的ObservableBoolean绑定到按钮。