在数据绑定中将另一个视图作为参数传递

2022-09-03 04:34:44

我正在尝试将我的xml的另一个视图作为Google数据绑定中方法的参数...喜欢这个:

<LinearLayout
    android:id="@+id/faq_subject_about_ego"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/border_faq_btn"
    android:orientation="horizontal"
    android:layout_marginBottom="20dp"
    android:padding="4dp"
    android:gravity="center"
    android:onClick='@{(faq_title_about) -> viewModel.subjectRequest(faq_title_about.getText())}'>

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/icon_faq"
        android:layout_marginRight="8dp"
        android:clickable="false" />

    <ebanx.com.ego.utils.custom_extension.CustomButtonBold
        android:id="@+id/faq_title_about"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        style="@style/Button_FAQ"
        android:text="@string/btn_about_ego"
        android:clickable="false" />
</LinearLayout>

我需要我的自定义按钮Bold中的文本...但这是行不通的。

如何将按钮的文本作为参数传递?

任何帮助是值得赞赏的!


答案 1

为 id-able 生成的成员具有驼峰大小写名称格式。此外,提供给 的视图是正在单击的视图。因此,只需任意命名参数并使用正确的“全局”成员即可。OnClickListener

android:onClick='@{(v) -> viewModel.subjectRequest(faqTitleAbout.getText())}'

答案 2

如果你在 Kotlin 中编码,你可能会想写以下内容:

android:onClick='@{(v) -> viewModel.subjectRequest(faqTitleAbout.text)}'

它不起作用,因为绑定类是由 Java 中的框架生成的。另一个问题是,使用EditText视图,您还需要添加对

toString()

如果要调用将字符串作为参数的函数。所以代码将是:

android:onClick='@{(v) -> viewModel.subjectRequest(faqTitleAbout.getText().toString())}'

这就是它与Kotlin和Android Studio 4.1.2一起工作的方式,否则你会得到一个构建错误(...一个奇怪的...)。我不知道将来是否会改变,或者它与其他版本有不同的行为。


推荐