При очистке данных в режиме поиска следует удалить отфильтрованный список и заполнить исходный список. - PullRequest
0 голосов
/ 29 января 2020

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

}

1 Ответ

0 голосов
/ 29 января 2020

Вам также необходимо сохранить исходный список и проверить, является ли строка запроса пустой или нет.

 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()
        }
    }
...