如何解决暴露的下拉菜单 - 没有来自 xml 资源的过滤器
上下文
当您使用以下对象时:MaterialAutoCompleteTextView
或 AutoCompleteTextView
您可以指定文本是否过滤结果。您可以使用方法 setText(CharSequence text,boolean filter) 和我引用:
boolean:如果为 false,则不会因此执行任何过滤 打电话。
..而且这个方法很完美!
问题
是否可以直接从 xml 做同样的事情? 让我解释一下,使用 data binding 我可以通过 android:text
xml 属性设置一个值。像这样:
<MaterialAutoCompleteTextView
android:text="@{viewmodel.data}" />
由于我没有选项来指定我是否真的要过滤结果,它使用默认设置为 true.. 不幸的是,我想使用 false。
更多信息
我使用官方文档进行了一些研究,但在引用 MaterialAutoCompleteTextView 和 AutoCompleteTextView 的页面中没有发现任何内容。
解决方法
您应该能够创建一个 BindingAdapter
并使用 Databinding
设置这些值而不会出现任何问题。
例如,您可以创建如下内容:
@BindingAdapter("app:text","app:filter")
fun MaterialAutoCompleteTextView.updateFilter(text: String,filter: Boolean) {
this.setText(text,filter)
}
然后,在您的 xml 中使用 databinding
为:
<com.google.android.material.textfield.MaterialAutoCompleteTextView
android:id="@+id/autocomplete"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:filter="@{ here comes filter value }"
app:text="@{ here comes text value }" />
请记住,我没有运行此代码,因此可能存在一些拼写错误,但我想您已经明白了。
另一件要考虑的事情是在 Kotlin
代码中我使用了一个扩展函数,您可以轻松更改它并将 MaterialAutoCompleteTextView
作为第一个参数传递。
我是如何实施的:
根据 hardartcore 的回答,我研究了 binding adapter 及其最佳实践。在我的模型类中,我添加了一个已被引用的方法,用于使用我定义的函数实际绑定数据。
public class Model {
...
@BindingAdapter(value = {"text","filter"})
public static void setText(MaterialAutoCompleteTextView view,String text,Boolean filter) {
view.setText(text,filter);
}
}
value
指定使用您的函数所需的参数,您也可以使用 requiredAll = false
来判断可能会有一些 null
值。就我而言,我总是在 xml 中同时需要两者:
<com.google.android.material.textfield.MaterialAutoCompleteTextView
...
app:filter="@{false}"
app:text="@{mode.variable}" />
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。