Навигация Jetpack: как открыть новый фрагмент из адаптера recyclerview?

Обычно я открываю новый фрагмент из существующего фрагмента или действия. Однако с адаптером, который можно использовать в нескольких фрагментах/действиях, как мне динамически открыть определенный фрагмент?

Обычно я использую следующий фрагмент кода:

Navigation.findNavController(view).navigate(R.id.action_startFragment_to_destinationFragment);

после создания действия в навигационном графе.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
596
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поскольку навигация происходит между фрагментами, обычно ответственность за это возлагается на фрагмент.

Как вы сказали этому адаптеру, который можно использовать в нескольких фрагментах, поэтому он должен быть присоединен к определенному фрагменту за раз, что обычно является фрагментом, который его создал.

Таким образом, вы можете передать интерфейс слушателя адаптеру, который реализован фрагментом; где вы можете инициировать его обратный вызов в адаптере всякий раз, когда вы хотите перейти к другому фрагменту в графе навигации.

Этот метод обратного вызова будет выполняться во фрагменте, который уже реализует прослушиватель, и обычно вы можете использовать традиционный код навигации:

Navigation.findNavController(view).navigate(R.id.action_startFragment_to_destinationFragment);

Таким образом, ваш адаптер можно использовать повторно, и каждый раз, когда фрагмент хочет использовать его повторно, он должен реализовать прослушиватель.

Примечание. Вероятно, вы можете передать аргумент int обратному вызову прослушивателя, который передает номер строки в адаптере обратно во фрагмент, чтобы вы могли решить перейти к другому фрагменту.

Таким образом, вы можете сохранить навигацию только по фрагментам.

Другие вопросы по теме