2

这是我的 xml:

<data>

    <variable
        name="notificationViewmodel"
        type="com.kdcos.contsync.viewmodel.notification.NotificationViewModel"></variable>

</data>


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorpalegrey">

    <RelativeLayout
        android:id="@+id/header"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_gravity="center"
        android:background="#689F38"
        android:gravity="center">

        <include
            android:id="@+id/layout_toolbar"
            layout="@layout/toolbar_white_bg" />
    </RelativeLayout>


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/header"
        android:layout_marginTop="20dp"
        android:background="@drawable/topbottomborder"
        android:orientation="vertical">


        <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="18dp"
            android:paddingBottom="20dp"
            android:paddingLeft="@dimen/margin_20dp">


            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:fontFamily="sans-serif-medium"
                android:lineSpacingExtra="30sp"
                android:text="@={notificationViewmodel.getText()}"
                android:textColor="@color/colorDusk"
                android:textSize="16sp"
                android:textStyle="normal" />

            <Switch
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:paddingRight="10dp"
                android:onCheckedChanged="@={notificationViewmodel.checked}"
                android:textColor="@android:color/black" />

        </RelativeLayout>
    </LinearLayout>


</RelativeLayout>

这是我的视图模型

class NotificationViewModel(val context: Context, val bus: Bus, val manager: CNotificationManager) : BaseObservable() {
    private var checked: Boolean = false
    fun getToolbarTitle(): String? {
        return manager.getToolbarTitle()
    }

    fun setToolbarTextColor(): Int {
        return ContextCompat.getColor(context, R.color.colorDusk)
    }

    fun isChecked(): Boolean {
        return checked
    }

    fun setChecked(checked: Boolean) {
        this.checked = checked
    }

    fun getText(): String {
        if (isChecked()) {
            return "Notfication On"
        } else {
            return "Notification Off"
        }
        notifyChange()
    }
}

我想应用数据绑定,switch以便当我打开时switch应该 textView显示通知关闭并且检查值应该设置为 true,当我关闭时它textview应该显示通知关闭并且检查布尔变量应该设置为 false。请建议我如何使用 Data-binding 实现。

4

2 回答 2

2

你需要这样做:

内部xml:

android:onCheckedChanged="@{viewModel::executeOnStatusChanged}"
android:checked="@={viewModel.isChecked()}"

在您的视图模型内部:

@Bindable
val isChecked: MutableLiveData<Boolean> = MutableLiveData()

fun executeOnStatusChanged(switch: CompoundButton, isChecked: Boolean) {
     Timber.d("Status changed")
}
于 2021-02-26T12:13:02.930 回答
1
android:onCheckedChanged="@={notificationViewModel.executeOnChanged()}"
android:isChecked="@={notificationViewModel.isChecked}"
于 2017-12-14T04:34:53.813 回答