Фильтр вложенных списков необходимо восстановить в исходный вложенный список - PullRequest
0 голосов
/ 19 марта 2020

У меня есть небольшое приложение android, которое состоит из списка перевозчиков, каждый перевозчик может иметь список принадлежащих им грузовиков. Мне нужно реализовать фильтр (этот фильтр можно настроить по тому параметру, по которому вы хотите фильтровать).

Когда пользователь выбирает фильтрацию данных, относящихся к списку грузовиков (вложенный список), он фильтрует правильно, но когда Вы удаляете дату, она не будет обновлять оригинальный список грузовиков. Я предполагаю, что эта проблема возникает, потому что мне нужно глубоко копировать каждый элемент в списке перевозчиков. У меня есть два списка (исходный и отфильтрованный)

Вот как я их определил:

private lateinit var originalHaulerData : ArrayList<HaulerData>
private lateinit var filteredHaulerData : List<HaulerData>   

при редактировании фильтра я восстанавливаю данные из исходных данных и фильтрую данные новым фильтром.

Это моя функция filterData

 fun filterData(){

//this is where I'm doing the copy from the original list to the filtered 
        filteredHaulerData = ArrayList(originalHaulerData)
        for(hIndex in originalHaulerData.indices){
            val filteredHauler = originalHaulerData[hIndex].copy()
            if(originalHaulerData[hIndex].truckList!=null){

                for (tIndex in originalHaulerData[hIndex].truckList!!.toMutableList().indices)
                {
                    val truck = originalHaulerData[hIndex].truckList!!.toMutableList()[tIndex].copy()
                    filteredHauler.truckList!!.toMutableList().add(tIndex,truck)
                }

            }
            filteredHaulerData.toMutableList().add(hIndex,filteredHauler)
        }

        filteredHaulerData = filteredHaulerData.filter { hauler->

            var trucksFiltered = false
            if(!hauler.truckList.isNullOrEmpty()) {

                val filteredTrucks = hauler.truckList!!.filter { truck ->
                    (haulerFilterObj.haulerDate==null || (haulerFilterObj.haulerDate!=null && truck.timestamp!=null && truck.timestamp!!.startsWith(haulerFilterObj.haulerDate!!))) &&
                    (haulerFilterObj.haulerTruck==null || (haulerFilterObj.haulerTruck!=null && truck.trackName!=null && truck.trackName!!.startsWith(haulerFilterObj.haulerTruck!!)))
                }

                hauler.truckList = filteredTrucks
                trucksFiltered = hauler.truckList!!.isNotEmpty()
            }else{
                trucksFiltered = false
            }

            (haulerFilterObj.haulerDate==null || trucksFiltered) &&
                    (haulerFilterObj.haulerName==null || (haulerFilterObj.haulerName!=null && hauler.name!!.toLowerCase(Locale.US).startsWith(haulerFilterObj.haulerName!!.toLowerCase(Locale.US)))) &&
                    (haulerFilterObj.haulerLocation==null || (haulerFilterObj.haulerLocation!=null && hauler.address!=null && hauler.address.toLowerCase(Locale.US).contains(haulerFilterObj.haulerLocation!!.toLowerCase(Locale.US))))

        }

        noHaulersHolder.visibility = if(filteredHaulerData.isEmpty()) View.VISIBLE else View.GONE
        haulerRecyclerView.visibility = if(filteredHaulerData.isEmpty()) View.GONE else View.VISIBLE

        haulerAdapter.setData(filteredHaulerData)
        mapHaulersAdapter.setData(filteredHaulerData)
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...