使用带有参数的自定义绑定适配器侦听器方法的Android自定义视图

亚历杭德罗·卡萨诺瓦(Alejandro Casanova)

我正在开发一个自定义搜索视图,并且需要添加一个侦听器,以便viewmodel可以使用数据绑定对查询执行搜索,我目前在使用查询参数设置绑定适配器时遇到问题,以下是相关部分:

这是带有监听器事件的自定义视图:

class MySearchView @JvmOverloads constructor(
    context: Context,
    attrs: AttributeSet? = null,
    defStyleAttr: Int = android.R.attr.editTextStyle
) : AppCompatEditText(context, attrs, defStyleAttr) {

    var onSearchListener: ((query: String) -> Unit)? = null
}

这是绑定适配器:

@BindingAdapter("onSearchListener")
fun MySearchView.setOnSearchListener(event: (query: String) -> Unit) {
    onSearchListener = event
}

这是XMl布局部分:

<com.xxx.MySearchView
    android:id="@+id/txt_search"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:hint="@string/label_search"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:onSearchListener="@{(query) -> viewModel.onSearchTriggered(query)}"/>

最后,我在viewmodel中的方法:

fun onSearchTriggered(query: String) {
    Log.d("search", "search: $query")
}

当我编译XML失败时,告诉我它找不到上面的方法,这是错误:

cannot find method onSearchTriggered(java.lang.Object) in class com.xxx.MyViewModel

我以前尝试过使用不带参数的自定义侦听器,并且一切正常,所以我认为添加参数时一定做错了什么想法?

凯泽(Kyzer Soze)

我认为这不能工作,因为无法在XML中指定参数的类型,但是我希望传递viewModel::onSearchTriggered可以工作,但看起来却行不通。您可以使用以下方法之一来执行此操作:

  1. 您可以在ViewModel中声明一个变量而不是一个函数:
val onSearchTriggered = { query: String ->
    Log.d("search", "search: $query")
}

然后,您可以像这样直接传递变量:

<com.xxx.MySearchView
    android:id="@+id/txt_search"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:hint="@string/label_search"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:onSearchListener="@{viewModel.onSearchTriggered}"/>
  1. 您可以为您的侦听器创建一个接口:
interface OnSearchListener {
    fun onSearch(String)
}

@BindingAdapter("onSearchListener")
fun MySearchView.setOnSearchListener(listener: OnSearchListener) {
    onSearchListener = listener::onSearch
}

然后可以像这样使用它:

<com.xxx.MySearchView
    android:id="@+id/txt_search"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:hint="@string/label_search"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:onSearchListener="@{viewModel::onSearchTriggered}"/>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Android的自定义数组适配器中将侦听器添加到EditText

来自分类Dev

使用自定义适配器在AlertDialog中单击侦听器

来自分类Dev

自定义适配器视图(带有图片)

来自分类Dev

使用自定义适配器和视图持有器的Android列表视图

来自分类Dev

使用自定义适配器的Android数据绑定

来自分类Dev

android:带有自定义适配器的AutoCompleteTextView

来自分类Dev

android:带有自定义适配器的AutoCompleteTextView

来自分类Dev

自定义适配器中EditText的文本更改侦听器

来自分类Dev

Android Studio中带有自定义适配器的自定义ListView

来自分类Dev

Android DataBinding自定义绑定适配器警告

来自分类Dev

参数错误android自定义适配器

来自分类Dev

Android:使用自定义适配器设置AutoCompleteTextView

来自分类Dev

如何使用Hashmap为自定义列表视图创建自定义适配器

来自分类Dev

为性能而设计的自定义列表阵列适配器:在何处添加侦听器?

来自分类Dev

具有自定义适配器的Android自定义AutoCompleteTextView

来自分类Dev

Android:在我的自定义适配器中使用数据绑定时未分配值

来自分类Dev

Android中自定义搜索视图的侦听器

来自分类Dev

Android:具有图像和文本错误的自定义网格视图适配器

来自分类Dev

Android:具有图像和文本错误的自定义网格视图适配器

来自分类Dev

带有自定义适配器的 Android ListView 仅显示最后一项

来自分类Dev

带有对齐特定行的自定义适配器的 Android ListView

来自分类Dev

自定义绑定适配器中的通用lambda

来自分类Dev

自定义视图的适配器中的NullPointerException

来自分类Dev

自定义适配器不显示列表视图

来自分类Dev

自定义适配器的问题

来自分类Dev

ListView的自定义适配器

来自分类Dev

自定义ListView的适配器

来自分类Dev

Gson类型适配器与自定义脱盐器

来自分类Dev

Android自定义适配器如何工作?

Related 相关文章

  1. 1

    在Android的自定义数组适配器中将侦听器添加到EditText

  2. 2

    使用自定义适配器在AlertDialog中单击侦听器

  3. 3

    自定义适配器视图(带有图片)

  4. 4

    使用自定义适配器和视图持有器的Android列表视图

  5. 5

    使用自定义适配器的Android数据绑定

  6. 6

    android:带有自定义适配器的AutoCompleteTextView

  7. 7

    android:带有自定义适配器的AutoCompleteTextView

  8. 8

    自定义适配器中EditText的文本更改侦听器

  9. 9

    Android Studio中带有自定义适配器的自定义ListView

  10. 10

    Android DataBinding自定义绑定适配器警告

  11. 11

    参数错误android自定义适配器

  12. 12

    Android:使用自定义适配器设置AutoCompleteTextView

  13. 13

    如何使用Hashmap为自定义列表视图创建自定义适配器

  14. 14

    为性能而设计的自定义列表阵列适配器:在何处添加侦听器?

  15. 15

    具有自定义适配器的Android自定义AutoCompleteTextView

  16. 16

    Android:在我的自定义适配器中使用数据绑定时未分配值

  17. 17

    Android中自定义搜索视图的侦听器

  18. 18

    Android:具有图像和文本错误的自定义网格视图适配器

  19. 19

    Android:具有图像和文本错误的自定义网格视图适配器

  20. 20

    带有自定义适配器的 Android ListView 仅显示最后一项

  21. 21

    带有对齐特定行的自定义适配器的 Android ListView

  22. 22

    自定义绑定适配器中的通用lambda

  23. 23

    自定义视图的适配器中的NullPointerException

  24. 24

    自定义适配器不显示列表视图

  25. 25

    自定义适配器的问题

  26. 26

    ListView的自定义适配器

  27. 27

    自定义ListView的适配器

  28. 28

    Gson类型适配器与自定义脱盐器

  29. 29

    Android自定义适配器如何工作?

热门标签

归档