Я сохранил большие данные с сервера в список массивов, я делаю поиск по списку, используя настраиваемый список массивов, например: Arraylist
Обычно я делаю следующее: 1. Добавьте один текст редактирования и примените TextWatcher listner для запускаметод фильтра.2. Я разработал один простой метод фильтрации и отфильтровал некоторые данные и передал список адаптеру
Я знаю, что данные слишком велики, но я не знаю другого метода.
Мой метод фильтрации:
override fun doInBackground(vararg params: String): String {
if (charString.isEmpty()) {
menu_list_filtered = arrayListOf()
} else {
val filteredList = ArrayList<MenuListItem>()
var i =0
while (i < menu_list.size && !isCancelled()) {
loge(TAG,"is p canceled "+isCancelled)
val arrayList = ArrayList<ProductListItem>()
var j =0
while (j < 2 && !isCancelled()) {
loge(TAG,"is c canceled "+isCancelled)
if(menu_list.get(i).product_list!![j].p_name.toLowerCase().contains(charString.toLowerCase()) || menu_list.get(i).product_list!![j].p_desc.toLowerCase().contains(charString.toLowerCase())){
arrayList.add(ProductListItem("","", arrayListOf(), menu_list.get(i).product_list!![j].p_desc,"","", menu_list.get(i).product_list!![j].p_name,"","","","",""))
filteredList.add(MenuListItem("","","","", menu_list.get(i).c_name,arrayList))
}
++j
}
++i
}
menu_list_filtered = filteredList
}
}
наконец я передаю menu_list_filtered в адаптер и устанавливаю notifydatasetchanged ()
Проблема: Когда я вхожуодин символ на редактируемом тексте, мой пользовательский интерфейс (фокус на редактируемом тексте) застрял на некоторое время, я не знаю, проблема в том, что он тратит так много времени, что я пробовал Asyntask, но не решил.Я знаю, что это может быть причиной такого большого списка, но я не знаю другого варианта.Пожалуйста, предложите мне, как я могу фильтровать (локально) сглаживание в моем проекте.