首页 > 解决方案 > 无法从自定义微调器中选择项目(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" />

标签: androidkotlinautocompletetextview

解决方案


推荐阅读