В моем приложении для Android есть фрагмент под названием «Домой», который отображает список животных. Этот список управляется адаптером с именем AnimalAdapter. Кроме того, у меня есть модальное окно «ReproductionFilter», которое позволяет пользователям применять к животным фильтры, такие как категория и статус.
Описание проблемы: «AnimalAdapter» содержит логику применения этих фильтров в методе «onFiltersChanged». В настоящее время при изменении фильтра я вызываю этот метод непосредственно во фрагменте «Home», который обновляет список животных на основе выбранных фильтров.
Однако я хочу, чтобы модальное окно «ReproductionFilter» также могло обновлять список животных на основе выбранных фильтров. Центральный вопрос здесь заключается в том, как передать функцию (или каким-либо другим способом уведомить адаптер) из фрагмента «Home» в модальное окно «ReproductionFilter», чтобы обновление адаптера могло происходить из модального окна.
Код во фрагменте «Home»: Фрагмент «Home» содержит инициализацию адаптера и кнопку, которая открывает модальное окно «ReproductionFilter» посредством навигации.
class Home: Fragment(R.layout.fragment_home) { ... переопределить fun onViewCreated(view: View, saveInstanceState: Bundle?) { super.onViewCreated(просмотр, сохраненныйInstanceState) ... этот.setupAdapter() это.setUpOpenModalButton() ... } частное развлечение setUpOpenModalButton() { val fab = фрагментView.findViewById(R.id.btn_open_filters) fab.setOnClickListener { findNavController().navigate(R.id.action_menu_item_home_to_reproductionFilter) } } личное развлечение setupAdapter() { val AnimalFetchList = FakeIt.randomAnimalList(500) адаптер = AnimalAdapter(animalFetchList) recycler.adapter = адаптер } } Код в «AnimalAdapter»: «AnimalAdapter» содержит метод «onFiltersChanged», отвечающий за применение фильтров и обновление списка животных.
class AnimalAdapter(val originalList: List) : RecyclerView.Adapter() { var mFilteredList = mutableListOf() ... @SuppressLint("NotifyDataSetChanged") весело onFiltersChanged() { val selectedSearchString = AppState.searchReproductionString val selectedFilters = AppState.selectedFilters mFilteredList.clear() originalList.forEach {животное -> если (animal.id.contains(selectedSearchString)) { mFilteredList.add(животное) println(animal.id) } } уведомитьDataSetChanged() } Код в модальном окне «ReproductionFilter»: Модальное окно «ReproductionFilter» создает флажки, которые позволяют пользователям изменять фильтры. Фильтры хранятся в глобальном объекте AppState. Здесь вопрос в том, как уведомить «AnimalAdapter» об изменениях в фильтрах и разрешить его обновление.
class ReproductionFilter : BottomSheetDialogFragment(R.layout.reproduction_filters_modal) { val selectedfilters = AppState.selectedFilters переопределить fun onViewCreated(view: View, saveInstanceState: Bundle?) { super.onViewCreated(просмотр, сохраненныйInstanceState) контейнер вар: LinearLayout filterList.forEach { фильтр -> if (filter.type == FilterType.STATUS) { контейнер = view.findViewById(R.id.ll_status_filter_container) } еще { контейнер = view.findViewById(R.id.ll_category_filter_container) } val cbx = createFilterButton (контейнер, фильтр) cbx.setOnCheckedChangeListener { buttonView, isChecked -> // Я ХОЧУ НАЗВАТЬ ЭТО ЗДЕСЬ ГЛОБАЛЬНО если (isChecked) { selectedfilters.add(фильтр) } еще { выбранные фильтры удалить (фильтр) } } контейнер.addView(cbx) } } } Как передать функцию (или использовать аналогичный подход) из фрагмента «Home» в модальное окно «ReproductionFilter», чтобы можно было выполнить обновление «AnimalAdapter» из модального окна?
Будем признательны за любые разъяснения. Спасибо!

Мобильная версия