Как сделать RecyclerView с глубокой навигацией? - PullRequest
0 голосов
/ 11 октября 2019

Вот пример из приложения McDonalds, где во фрагменте меню есть RecyclerView, когда вы щелкаете по любому элементу, для которого появляется точно такой же RecyclerView (только с измененным содержимым, которое зависит от выбранного элемента),и в следующий раз это повторяется. Как вы можете реализовать точно такую ​​же навигацию? (и как перенести данные о выбранной кнопке в такую ​​сложную структуру) Кто с этим уже сталкивался? Данные поступают из sql.

Пример McDonalds

1 Ответ

2 голосов
/ 11 октября 2019

Я только что скачал и проверил это приложение. Итак, вот что я думаю.

Похоже, вкладка меню Fragment. Давайте назовем это MenuMainFragment. Нажав, например, на Drinks, мы собираемся открыть что-то вроде MenuGroupFragment, и наш предыдущий фрагмент добавляет в backstack. Пока мы находимся в MenuGroupFragment, мы также можем щелкнуть по любому элементу, и, наконец, появляется MenuItemsFragment (MenuGroupFragment также собирается вернуться назад). Нажатие на любой элемент здесь заставляет нас открыть ItemActivity, очевидно. Так что в любом случае есть 3 уровня глубины. На мой взгляд, все фрагменты в нашем «потоке» создаются путем передачи в него некоторой информации. Например, в MenuGroupFragment мы передаем что-то вроде «subgroupId», а затем находим все, что связано с «subgroupId», в нашей базе данных и так далее. На мой взгляд, это наиболее очевидный случай.

Менее очевидный случай может иметь только один Fragment со своим собственным управлением потоком данных, что является более сложным и может быть достигнуто многими различными реализациями. Вероятно, это может быть достигнуто с помощью Map<Int, List<Element>>, где ключ карты - ваш шаг, а значение - список элементов, связанных с этим шагом. Я думаю, что будут некоторые проверки, если это первый шаг или нет, чтобы изменить значок панели инструментов, название и поведение onBackPressed().

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