Android-创建自定义xml属性(如onClick?

问题描述 投票:0回答:1

我正在尝试创建一个包含两个按钮的自定义视图,分别单击“确定”和“取消”。我的视图模型中有两种方法,分别为fun onOkClicked(view View)fun onCancelClicked(view View)。我如何通过XML布局文件(例如android:onClick="methodName")传递这些函数,我们可以从活动或视图模型的上下文传递函数,以便在单击这些按钮时调用传递的方法。是否可以创建自定义属性,例如onCreate?我知道要创建自定义属性,但是我一直在获取和调用从上下文传递的函数。

java android android-layout kotlin android-custom-view
1个回答
0
投票

当您使用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()

让我知道是否有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.