【发布时间】:2021-10-27 14:10:53
【问题描述】:
我尝试在片段中添加带有自定义适配器的 AutoCompleteTextView。
问题是下拉列表底部有一个空白区域。 空白似乎与结果有关:结果越多,空白就越大。
这是我的代码:
AutoCompleteTextViewAdapter.kt
class AutoCompleteTextViewAdapter(private val c: Context, @LayoutRes private val layoutResource: Int, private val nameList: Array<NameList>) :
ArrayAdapter<NameList>(c, layoutResource, nameList) {
var filteredNames: List<NameList> = listOf()
override fun getCount(): Int = filteredNames.size
override fun getItem(position: Int): NameList = filteredNames[position]
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
val view = convertView ?: LayoutInflater.from(c).inflate(layoutResource, null, false)
view.tvId.text = filteredNames[position].id.toString()
view.tvName.text = filteredNames[position].name
return view
}
override fun getFilter(): Filter {
return object : Filter() {
override fun publishResults(charSequence: CharSequence?, filterResults: FilterResults) {
@Suppress("UNCHECKED_CAST")
filteredNames = filterResults.values as List<NameList>
notifyDataSetChanged()
}
override fun performFiltering(charSequence: CharSequence?): FilterResults {
val queryString = charSequence?.toString()?.toLowerCase()
val filterResults = FilterResults()
filterResults.values =
nameList.filter {
it.name.toLowerCase().contains(queryString.toString()) || it.id.toString().contains(queryString.toString())
}
return filterResults
}
}
}
item_list.xml
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="@dimen/margin">
<TextView
android:id="@+id/tvId"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textSize="12sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tvName"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvId" />
</androidx.constraintlayout.widget.ConstraintLayout>
fragment.xml
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/name_label"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:hint="Name"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<AutoCompleteTextView
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="54dp"
android:inputType="textAutoComplete|textCapWords"
android:paddingStart="16dp"
android:singleLine="true"
android:textSize="16sp" />
</com.google.android.material.textfield.TextInputLayout>
Fragment.kt
val Names = arrayOf( NameList(1001,"David"), NameList(1002, "Johnson"), NameList(1013, "Kevin"))
val adapter = AutoCompleteTextViewAdapter(requireActivity().getApplicationContext(), R.layout.item_list, Names)
val textView = binding.Name as AutoCompleteTextView
textView.threshold = 1
textView.setAdapter(adapter)
【问题讨论】:
标签: android kotlin autocomplete autocompletetextview