- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
任何人都可以指导我了解如何使用与 AppCompatAutoCompleteTextView 的数据绑定(bind)来设置适配器并获取值
最佳答案
最后我得到了这样的解决方案image
BindingAdapter.kt
@JvmStatic
@BindingAdapter("valueAttrChanged")
fun MyAutoCompleteSpinner.setListener(listener: InverseBindingListener?) {
this.onItemSelectedListener = if (listener != null) {
object : AdapterView.OnItemSelectedListener {
override fun onNothingSelected(parent: AdapterView<*>?) {
listener.onChange()
}
override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
listener.onChange()
}
}
} else {
null
}
}
@JvmStatic
@get:InverseBindingAdapter(attribute = "value")
@set:BindingAdapter("value")
var MyAutoCompleteSpinner.selectedValue: String?
get() {
return if (listSelection != ListView.INVALID_POSITION) {
adapter.getItem(listSelection).toString()
} else {
null
}
}
set(value) {
val newValue = value ?: adapter.getItem(0).toString()
setText(newValue, true)
if (adapter is ArrayAdapter<*>) {
val position = (adapter as ArrayAdapter<String?>).getPosition(newValue)
listSelection = position
}
}
@JvmStatic
@BindingAdapter("entries", "itemLayout", "textViewId", requireAll = false)
fun MyAutoCompleteSpinner.bindAdapter(entries: Array<String>, @LayoutRes itemLayout: Int?, @IdRes textViewId: Int?) {
val adapter = when {
itemLayout == null -> {
ArrayAdapter(context, android.R.layout.simple_list_item_1, android.R.id.text1, entries)
}
textViewId == null -> {
ArrayAdapter(context, itemLayout, entries)
}
else -> {
ArrayAdapter(context, itemLayout, textViewId, entries)
}
}
setAdapter(adapter)
}
layout.xml
....
<data>
<variable
name="viewmodel"
type="com.example.vm.ViewModel" />
</data>
.......
.......
<com.google.android.material.textfield.TextInputLayout
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.ExposedDropdownMenu"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Gender">
<com.example.widget.MyAutoCompleteSpinner
android:layout_width="match_parent"
android:layout_height="wrap_content"
entries="@{@stringArray/genders}"
value="@{viewmodel.gender}"/>
</com.google.android.material.textfield.TextInputLayout>
....
MyAutoCompleteSpinner.kt
package com.example.widget
import android.content.Context
import android.graphics.Color
import android.graphics.Rect
import android.util.AttributeSet
import android.view.MotionEvent
import com.google.android.material.textview.MaterialAutoCompleteTextView
import timber.log.Timber
class MyAutoCompleteSpinner : MaterialAutoCompleteTextView {
constructor(context: Context) : this(context, null)
constructor(arg0: Context, arg1: AttributeSet?) : super(arg0, arg1)
constructor(arg0: Context, arg1: AttributeSet, arg2: Int) : super(arg0, arg1, arg2)
init {
isCursorVisible = false
setEnableSpinner(false)
setTextColor(Color.BLACK)
}
override fun onFocusChanged(focused: Boolean, direction: Int, previouslyFocusedRect: Rect?) {
super.onFocusChanged(focused, direction, previouslyFocusedRect)
if (focused && filter != null) {
performFiltering(null, 0)
}
setEnableSpinner(false)
}
override fun onTouchEvent(event: MotionEvent?): Boolean {
Timber.d(event?.action.toString())
when {
event?.action == MotionEvent.ACTION_MOVE -> {
setEnableSpinner(true)
}
event?.action == MotionEvent.ACTION_UP -> {
setEnableSpinner(true)
}
event?.action == MotionEvent.ACTION_DOWN -> {
setEnableSpinner(true)
}
}
if (event?.action == MotionEvent.ACTION_UP) {
if (event.rawX <= totalPaddingLeft) {
setEnableSpinner(true)
return true
}
}
return super.onTouchEvent(event)
}
fun setEnableSpinner(enable: Boolean){
this.isEnabled = enable
}
override fun performFiltering(text: CharSequence?, keyCode: Int) {
super.performFiltering(null, keyCode)
}
}
string.xml
<string-array name="genders">
<item>"Male"</item>
<item>"Female"</item>
</string-array>
关于android-studio - Android 中的 AutoCompleteTextView 或 Spinner 数据绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58737505/
当用户点击 ACTV 并找到他正在搜索的内容时,他再次选择 ACTV 的唯一原因是搜索其他内容。我正在寻找一种方法,当用户在 ACTV 中进行搜索并且搜索文本位于 ACTV 字段中(建议菜单已关闭)时
当我单击 AutoCompleteTextView 的建议时,我希望光标移动到下一个可用的 EditBox 或 AutoCompleteTextView。 我在下面附上了我的布局和我的应用图像文件。在
我有一个 AppCompatAutoCompleteTextView,其 anchor 比 AppCompatAutoCompleteTextView 更靠下。这是设计使然,无法更改。当我在下拉菜单上
我正在使用 3 个 AutocompleteTextViews 来建议来自数据库的条目。我对 AutocompleteTextView 进行了子类化处理,以便在单击时将默认文本设置为 null,并在移
我正在使用 AutoCompleteTextView 创建下拉菜单。如何删除列表顶部和底部的默认边距? 重新创建: List dropdownItems
我正在尝试让 TextWatcher 与 AutoCompleteTextView 一起工作,但遇到了一些问题。我面临的问题是,当我开始输入文本时,如果数据输入的长度只有一个字符,我在 AutoCom
即使我没有在下拉列表项布局中设置边距,下拉列表也带有左右边距。我希望它与 autocompletetextview 的宽度相匹配。我怎样才能做到这一点? 这是我的 AutoCompleteTextVi
我的应用实现了一个 HashMap,这样当在 AutoCompleteTextView editText 中键入 key 时,并且用户单击下拉项,该值将显示在textView上。 唯一的问题是,单击的
这里是 Android 菜鸟,之前是 iOS、.Net、C 和 Fortran。 如果我有一个带有 1000 多个字符串的 ArrayAdapter,我如何修改 AutoCompleteTextVie
嗨,我刚刚开始学习 android Studio,我想要一个 AutoCompletetextView 和一个按钮,如果用户输入未在数组列表中列出,则添加用户输入。我的 AutoCompleteTex
我正在开发一个使用 AutoCompleteTextView 的应用程序,但遇到了一些问题。请在下面查找问题的详细信息。 数据中存在以下值: 1)曼尼什·洛根·杰恩 2)M.J.(洛根·费恩) 3)洛
我正在尝试根据另一个 View (微调器)中选择的选项来更改 AutoCompleteTextView 的建议列表。不幸的是,这个 TextView 的适配器似乎没有从另一个 View 的 setOn
我有这个布局: 使用这种风格: @color/text_input_layout_outlined_box_stroke @color/green_2 我试图在自动
我正在尝试使用 AutoCompleteTextView 进行过滤,但过滤器出现问题。它返回 ArrayList 中的所有项目,而不是过滤后的项目。下面是我的代码: Filter nameFilte
我想制作一个 AutoCompleteTextview ,它将从内部存储加载以前保存的建议。我成功地将字符串从内部存储加载到字符串数组(我使用日志记录来检查......)。 然后,当我将字符串数组加载
我有一个 AutoCompleteTextView,我想在它上面设置一个过滤器,我遇到的问题是当我去输入一些东西时它只会让我在文本字段中输入 1 个字符。如果我从代码中删除 textView.setF
我有两个自动完成 TextView 例如,如果任何人选择自动完成 TextView “HUB ID”位置#3,则另一个自动完成 TextView “HUBName”必须强制位于位置 3即希望它们都处于
您好 Android 开发人员, 我有一个关于自动完成 TextView 的问题。我在平板电脑上开发,我很好地定制了它。当我在平板电脑上运行它时,它看起来像这样: 这实际上是我想要的 - 所有可见的东
我正在处理一项要求,其中使用自动完成 TextView 来获取匹配的Localities。用户必须输入几个字符,然后从服务器返回与这些字符匹配的 Localities 列表。自动完成 TextView
使用 Bootstrap 的 Web 应用程序,有这样的输入区域。 在 Android 中有没有像这样实现 EditText 的库? 最佳答案 是的,完成的泡泡在Android中被称为“筹码”。工作解
我是一名优秀的程序员,十分优秀!