В своей деятельности выполните поиск в списке и переназначьте значение (оставьте val baseList
и var filteredList
, чтобы при необходимости вы могли вернуться к оригиналу по умолчанию. Прежде всего, мы хотим переместить вложенный адаптер ввершина действия, чтобы мы могли получить к нему доступ после его создания. Мы также хотим использовать два списка для этого, поэтому добавьте baseList
и filteredList
, как у меня ниже private lateinit var adapter: ListAdapteArr? = null
в верхней части действия.
private lateinit var adapter: ListAdapteArr? = null
private var baseList: List<FlightShdu> = listOf()
private var filteredList: MutableList<FlightShdu> = mutableListOf()
В вашем методе handleJson()
, после того как список будет заполнен всеми FlightShdu
объектами, присвойте его baseList
baseList = list
Затем назначьте private lateinit var adapter
:
adapter = ListAdapteArr(this@MainActivity, baseList)
flight_arrivel_list.adapter = adapter
У вас есть метод, который берет слово для редактирования текстового поиска и сравнивает его с вашим списком
fun searchList() {
filteredList.clear()
baseList.forEach {
if (it.contains(search.text.toString())) {
filteredList.add(it)
}
}
adapter.updateList(filteredList)
Затем в вашем адаптере измените:
val list: ArrayList<FlightShdu>
наvar list: ArrayList<FlightShdu>
и иметь такой метод, как:
fun updateList(filteredList: List<FlightShdu>) {
list.clear()
list.addAll(filteredList)
notifyDataSetChanged()
}
С обновленным списком в действии, вызовите метод с adapter.updateList(filteredList)
Я бы также рекомендовал использоватьrecyclerview
вместо listview
RecyclerView против ListView
Вы можетеТакже обратите внимание на использование DiffUtils
, поскольку оно предлагает приятную плавную анимацию при переходе между списками в адаптере.Этот ответ был только для того, чтобы заставить вас катиться.
val diffResult = DiffUtil.calculateDiff(object : DiffUtil.Callback() {
override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean = newList[newItemPosition] == oldList[oldItemPosition]
override fun getOldListSize(): Int = oldList.size
override fun getNewListSize(): Int = newList.size
override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean = newList[newItemPosition] == oldList[oldItemPosition]
}
diffResult.dispatchUpdatesTo(adapter)