【问题标题】:Android Kotlin listview adapter filter shows only first itemAndroid Kotlin listview 适配器过滤器仅显示第一项
【发布时间】:2021-09-19 22:32:17
【问题描述】:

我制作了一个自定义 ArrayAdapter 来填充我的列表,并添加了 edittext 来过滤列表视图,但列表视图只过滤第一项。

XML:

<EditText
    android:id="@+id/invoiceSearchFilter"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="Search invoice"
    android:padding="15sp"
    android:background="@drawable/edit_text_border"/>

<ListView
    android:id="@+id/listViewInvoiceSearchList"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="60dp"
    android:layout_marginBottom="50dp"/>

科特林:

var listView = findViewById<ListView>(R.id.listViewInvoiceSearchList)
var adapter = InvoiceSearchListAdapter(this,idList, titleList, descList)

var thefilter = findViewById<EditText>(R.id.invoiceSearchFilter)
listView.adapter = adapter
thefilter.addTextChangedListener(object : TextWatcher {
                override fun beforeTextChanged(charSequence: CharSequence, i: Int, i1: Int, i2: Int) {
    
                }
    
                override fun onTextChanged(charSequence: CharSequence, i: Int, i1: Int, i2: Int) {
                    (listView.adapter as InvoiceSearchListAdapter).filter.filter(charSequence)
                }
    
                override fun afterTextChanged(editable: Editable) {
    
                }
            })

ListView 正确显示所有条目,但为什么我输入文本来过滤列表,它只过滤第一项。

【问题讨论】:

    标签: android kotlin android-listview android-arrayadapter android-adapter


    【解决方案1】:

    使用 foreach 过滤查询如下希望它也有助于使用toLowerCase(Locale.getDefault()) 以避免区分大小写:

    charSequence.forEach { q ->
               (listView.adapter as InvoiceSearchListAdapter).filter.filter(q)
            }
    

    【讨论】:

    • 这不会反复改变过滤器,最后应用一个只看最后一个字符的过滤器吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-06
    相关资源
    最近更新 更多