Как определить, что фрагмент взят из предыдущего или последующего фрагмента, используя компонент контроллера навигации в Android? - PullRequest
0 голосов
/ 28 июня 2019

Я использую компонент контроллера навигации.скажем, у меня есть 4 фрагмента

A -> B -> C или D

из фрагмента A, он может перейти только к фрагменту B. Но если мы находимся во фрагменте B, этоможет перейти к фрагменту C или фрагменту D.

Я хочу выполнить метод workXYZ() во фрагменте onResume B, если он происходит из фрагмента A, и я хочу выполнить метод doSomethingABC() во фрагменте onResume B, если онпроисходит от фрагмента C или фрагмента D.

от фрагмента A до фрагмента BI, используйте код ниже:

val BDestination = FragmentADirections.actionToFragmentB()
Navigation.findNavController(fragmentView).navigate(BDestination)

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

val CDestination = BFragmentDirections.actionGlobalFragment()
Navigation.findNavController(fragmentView).navigate(CDestination)

, а из фрагмента C или фрагмента D я использую кнопку возврата, чтобывернуться к фрагменту B.

Я попытался использовать безопасные аргументы boolean comesFromFragmentA = true в графе навигации, чтобы дать знак, что фрагмент B идет после фрагмента A. но, к сожалению, это значение в безопасных аргументахлогическое значение comesFromFragmentA останется прежним (true), если оно исходит из фрагмента C или D.

, что мне делать, если вы хотите узнать, появляется ли фрагмент B после предыдущего фрагмента или из фрагмента после?

1 Ответ

2 голосов
/ 28 июня 2019

Аргументы фрагмента изменчивы, поэтому вы можете изменить их в любое время. Поэтому вы можете обновить значение этого аргумента непосредственно перед переходом, чтобы указать, что будущие вызовы onResume() будут после того, как вы вернетесь к этому фрагменту:

// Set the comesFromFragmentA argument to signify that the next onResume()
// will be when you come back to this Fragment
arguments.putBoolean("comesFromFragmentA", false)

// Now navigate
val CDestination = BFragmentDirections.actionGlobalFragment()
Navigation.findNavController(fragmentView).navigate(CDestination)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...