如何在Android(Kotlin)中使用带有按钮启用属性的双向数据绑定

时间:2019-12-18 05:30:20

标签: android kotlin android-databinding android-jetpack

检查某些条件后,我需要启用我的按钮,我想使用 @InverseBinding或双向数据绑定调用一种方法,并用返回值反映更改。

我的代码:

<Button 
      android:id="@+id/save_btn_disabled_3"
      android:enabled="@={controller}"
      ....
      />

我的双向数据绑定逻辑在这里:

@InverseBindingAdapter(attribute = "enable")
    fun getEnableButton(view:View, controller:Controller): Boolean {
    //some conditions
        return false
    }

我想知道我朝正确的方向前进吗,代码正常吗? 请建议我。

2 个答案:

答案 0 :(得分:1)

首先添加按钮状态对象

<variable
            name="button"
            type="com.brl.test.app.vm.ButtonStatus" />

<Button 
      android:id="@+id/save_btn_disabled_3"
      bind:state_change="@{button.state}"
      ....
      />

在 buttonEnabled 功能中设置您的逻辑,然后启用您的按钮

@BindingAdapter({"bind:state_change"})
  public static void buttonEnabled(TextView view, State state) {
     
    view.setEnabled(true);
  }

答案 1 :(得分:0)

您可以在字段中设置一个变量,例如:

<variable
    name="wantsToVisibleProgress"
    type="boolean" />

并按如下所示将其设置在您的按钮中:

<Button
    android:id="@+id/constraint_select_main"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/bg_button_blue_big"
    android:enabled="@={wantsToVisibleProgress}"
    android:gravity="center"
    android:onClick="@{v -> fragment.onClick()}"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/txt_evse_one">

您可以这样设置该值:

binding.setWantsToVisibleProgress(true);