android - 无法从自定义微调器中选择项目(AutoCompleteTextView)
问题描述
我正在使用自定义适配器在 AutoCompleteTextView 中使用自定义视图显示用户对象。虽然这一直有效,但大约一两个星期前,我不再能够在下拉列表中选择该项目。代码没有改变,所以我不知道为什么会这样。对这个问题有什么想法吗?
问题:无法从下拉列表中选择项目
代码如下:
//Auto complete based on database for selecting the client
val taskParentList: List<TasksList> = ArrayList<TasksList>()
val adapter = TaskListSelectAdapter(this, R.layout.tasklistlayout, taskParentList)
taskListSelected.setAdapter(adapter)
taskListSelected.threshold = 2
taskListSelected.setOnItemClickListener { parent, _, position, id ->
val selectedTl = parent.adapter.getItem(position) as TasksList?
taskListSelected.setText(selectedTl?.taskListTitle)
taskListId = selectedTl?.taskListId
Log.i("tasklistID", "$taskListId")
}
//Adapter for selection of client list
inner class TaskListSelectAdapter(
context: Context,
@LayoutRes private val layoutResource: Int,
private var alltaskList: List<TasksList>
) :
ArrayAdapter<TasksList>(context, layoutResource, alltaskList),
Filterable {
private var mtaskList: List<TasksList> = alltaskList
override fun getCount(): Int {
return mtaskList.size
}
override fun getItem(p0: Int): TasksList {
return mtaskList[p0]
}
override fun getItemId(p0: Int): Long {
// Or just return p0
return p0.toLong()
}
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
var view = convertView
if (view == null) {
view = LayoutInflater.from(parent.context)
.inflate(layoutResource, parent, false)
}
val taskListName = view!!.findViewById<View>(R.id.tskListTitle) as TextView
taskListName.text = mtaskList[position].taskListTitle
return view
}
override fun getFilter(): Filter {
return object : Filter() {
override fun publishResults(
charSequence: CharSequence?,
filterResults: FilterResults
) {
mtaskList = filterResults.values as List<TasksList>
notifyDataSetChanged()
}
override fun performFiltering(charSequence: CharSequence?): FilterResults {
var queryString = charSequence?.toString()?.lowercase(Locale.ROOT)
val results = FilterResults()
results.values = if (queryString == null || queryString.isEmpty())
alltaskList
else {
queryString = "%${charSequence}%"
val db = AppDatabase.getDatabase(context)
alltaskList = db.TasksListsDao().getBySearch(queryString)
alltaskList
}
return results
}
}
}
}
XML 显示
<androidx.appcompat.widget.AppCompatAutoCompleteTextView
android:id="@+id/taskListSel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/taskParentText"
android:layout_marginTop="10dp"
android:background="@drawable/edittxtbg"
android:hint="Select an existing project or tasklist"
android:lineSpacingExtra="1.3dp"
android:maxLines="10"
android:padding="12dp"
android:textColor="?attr/txtcolor"
android:textColorHint="?attr/txthintcolor"
android:textSize="14sp" />
解决方案
推荐阅读
- node.js - 如何在服务器/云中运行 puppeteer
- angular - NGXS 更新深度嵌套属性的值
- html - CSS only slideshow does not show pictures
- python - 如何增加python中子图之间的高度(大小)和空间
- javascript - axios response.data != JSON.parse(response.request.response)
- laravel - 一个用户表可以同时用于 API 和常规身份验证吗?
- json - 将数据从 MATLAB 写入 firebase 数据库
- c++ - 在初始化列表中展开可变参数失败
- java - 执行相应的测试类时,使用来自侦听器类的反射设置的字段值设置为 null
- parameters - F# - 为什么我不能在这段代码中使用管道运算符?