Почему получение списка массивов блокирует пользовательский интерфейс - PullRequest
0 голосов
/ 12 октября 2018

Я сохранил большие данные с сервера в список массивов, я делаю поиск по списку, используя настраиваемый список массивов, например: 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, но не решил.Я знаю, что это может быть причиной такого большого списка, но я не знаю другого варианта.Пожалуйста, предложите мне, как я могу фильтровать (локально) сглаживание в моем проекте.

...