Android 在“搜索”视图中清除数据时,它应删除筛选列表并填充原始列表

Android 在“搜索”视图中清除数据时,它应删除筛选列表并填充原始列表,android,kotlin,searchview,Android,Kotlin,Searchview,HomeFragment.kt override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { return setupBindings(inflater, container, savedInstanceState) } override fun onViewCreated(view: Vie

HomeFragment.kt

 override fun onCreateView(
    inflater: LayoutInflater,
    container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    return setupBindings(inflater, container, savedInstanceState)

}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)

    searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
        override fun onQueryTextSubmit(query: String): Boolean {
            //filter the data in step 2
            return false
        }

        override fun onQueryTextChange(query: String): Boolean {
            orderHistoryViewModel.search(query)
            return false
        }
    })
}
我已经在片段中编写了setOnQueryTextListener。当我运行应用程序时,它只运行一次。但是,每次我从搜索栏中清除数据并在键入新数据时再次筛选时,如何删除筛选列表并填充原始列表呢

我在viewmodel中编写了搜索函数。下面的代码过滤原始列表中的数据并填充过滤后的列表

ViewModel.kt

fun search(query: String) {

    var filteredList =
        orderHistoryDetails?.orderList?.value?.filter { x -> x.order.contains(query) }

    orderHistoryDetails?.orderList?.value = filteredList

}

您还需要存储原始列表,并检查查询字符串是否为空

 fun search(text: String) {
        val filterList: MutableList<OrderItem> = arrayListOf()
        if (text.trim().length == 0) {
            filterList.clear()
            filterList.addAll(listOriginal)
            notifyDataSetChanged()
        } else {
            listOriginal.filter {x->
              x.order.toUpperCase.contains(text)
            }.apply {
                filterList.clear()
                filterList.addAll(this)
            }
            notifyDataSetChanged()
        }
    }
fun搜索(文本:字符串){
val filterList:MutableList=arrayListOf()
if(text.trim().length==0){
filterList.clear()
filterList.addAll(原始列表)
notifyDataSetChanged()
}否则{
listOriginal.filter{x->
x、 order.toUpperCase.contains(文本)
}.申请{
filterList.clear()
filterList.addAll(此)
}
notifyDataSetChanged()
}
}

不要覆盖原始列表。检查
query
如果它是
空的
,然后返回原始列表,否则会过滤列表我已经尝试过了,搜索只运行了一次。当我清除数据并输入新数据时,过滤不会再次发生。可能是您的原始列表被过滤列表覆盖,我已按照我使用和工作的方式更新了我的答案,可能是我的ans中需要一些变量更正,请检查是否有帮助。我已修复错误。它现在运转良好。非常感谢你。如果它帮助你,请考虑它接受和投票,所以它也帮助其他。当没有结果时,我必须显示“没有发现细节”和这个卡视图应该去。我该怎么做?