我正在尝试创建一个包含两个按钮的自定义视图,分别单击“确定”和“取消”。我的视图模型中有两种方法,分别为fun onOkClicked(view View)
和fun onCancelClicked(view View)
。我如何通过XML布局文件(例如android:onClick="methodName"
)传递这些函数,我们可以从活动或视图模型的上下文传递函数,以便在单击这些按钮时调用传递的方法。是否可以创建自定义属性,例如onCreate
?我知道要创建自定义属性,但是我一直在获取和调用从上下文传递的函数。
当您使用viewmodel时,因此可能了解数据绑定,它可以帮助您将viewmodel传递到xml。
Little guidance of DataBinding以防万一
现在您的自定义视图xml应该从顶部开始看起来像这样
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="viewModel"
type="com.samples.LoginViewModel" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
android:padding="20dp">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
tools:fontPath=""
android:onClick="@{(v) -> viewModel.onOkClicked()}"
android:text="Ok" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:onClick="@{(v) -> viewModel.onCancelClicked()}"
android:text="Cancel" />
</LinearLayout>
</layout>
并且在数据类中,您可以像下面那样使用它。
请说出您的xml名称:custom_view.xml
所以,在您的片段/活动/视图中
val binding: CustomViewBinding = CustomViewBinding.inflate(inflater, container, false)
binding.lifecycleOwner = viewLifecycleOwner
binding.viewModel = viewModel
binding.executePendingBindings()
让我知道是否有帮助。