Обычно я открываю новый фрагмент из существующего фрагмента или действия. Однако с адаптером, который можно использовать в нескольких фрагментах/действиях, как мне динамически открыть определенный фрагмент?
Обычно я использую следующий фрагмент кода:
Navigation.findNavController(view).navigate(R.id.action_startFragment_to_destinationFragment);
после создания действия в навигационном графе.
Поскольку навигация происходит между фрагментами, обычно ответственность за это возлагается на фрагмент.
Как вы сказали этому адаптеру, который можно использовать в нескольких фрагментах, поэтому он должен быть присоединен к определенному фрагменту за раз, что обычно является фрагментом, который его создал.
Таким образом, вы можете передать интерфейс слушателя адаптеру, который реализован фрагментом; где вы можете инициировать его обратный вызов в адаптере всякий раз, когда вы хотите перейти к другому фрагменту в графе навигации.
Этот метод обратного вызова будет выполняться во фрагменте, который уже реализует прослушиватель, и обычно вы можете использовать традиционный код навигации:
Navigation.findNavController(view).navigate(R.id.action_startFragment_to_destinationFragment);
Таким образом, ваш адаптер можно использовать повторно, и каждый раз, когда фрагмент хочет использовать его повторно, он должен реализовать прослушиватель.
Примечание. Вероятно, вы можете передать аргумент int
обратному вызову прослушивателя, который передает номер строки в адаптере обратно во фрагмент, чтобы вы могли решить перейти к другому фрагменту.
Таким образом, вы можете сохранить навигацию только по фрагментам.