Если вы по какой-то причине захотели перейти к определенному фрагменту (не к звездному) в начале, а также вам нужны графики для одного действия, вот что я предлагаю:
этот метод запускает действие
companion object {
const val REQUEST_OR_CONFIRM = "request_or_confirm"
const val IS_JUST_VIEW = "IS_JUST_VIEW"
const val MODEL = "model"
fun open(activity: Activity, isRequestOrConfirm: Boolean, isJustView: Boolean = false, model: DataModel? = null) {
val intent = Intent(activity, HostActivity::class.java)
intent.putExtra(REQUEST_OR_CONFIRM, isRequestOrConfirm)
intent.putExtra(IS_JUST_VIEW, isJustView)
intent.putExtra(MODEL, model)
activity.startActivity(intent)
}
}
, а затем в методе onCreate Host Activity сначала решите, какой граф использовать, а затем передайте пакет намеренных дополнений, чтобы начальный фрагмент мог решить, что делать:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_purchase_nav)
if (intent.getBooleanExtra(REQUEST_OR_CONFIRM, true)) {
findNavController(R.id.nav_host_fragment).setGraph(R.navigation.nav_first_scenario, intent.extras)
} else {
findNavController(R.id.nav_host_fragment).setGraph(R.navigation.nav_second_scenario, intent.extras)
}
}
и вот как вы можете решить, что делать в стартовом фрагменте:
if (arguments != null && arguments!!.getBoolean(HostActivity.IS_JUST_VIEW)){
navigateToYourDestinationFrag(arguments!!.getParcelable<DataModel>(HostActivity.MODEL))
}
, а затем перемещайтесь, как обычно:
private fun navigateToYourDestinationFrag(model: DataModel) {
val action = StartFragmentDirections.actionStartFragmentToOtherFragment(model)
findNavController().navigate(action)
}
вот как может выглядеть ваш график в случае, если вы хотите перейти к третьему фрагменту в начале
PS: убедитесь, что вы обработаете кнопку возврата на третьем фрагменте, здесь решение
UPDATE :
как упоминалось в EpicPandaForce, вы также можете начать действия, используя компоненты навигации:
чтобы сделать это, сначала добавьте Activity в свой существующий график, либо с помощью значка + (который у меня не работал), либо добавив вручную в xml:
<activity
android:id="@+id/secondActivity"
tools:layout="@layout/activity_second"
android:name="com.amin.SecondActivity" >
</activity>
вы также можете добавлять аргументы и использовать их так же, как и во фрагменте, с помощью navArgs ()
<activity
android:id="@+id/secondActivity"
tools:layout="@layout/activity_second"
android:name="com.amin.SecondActivity" >
<argument
android:name="testArgument"
app:argType="string"
android:defaultValue="helloWorld" />
</activity>
в koltin, вот как вы будете использовать аргумент. Сначала объявите аргументы с типом сгенерированного класса, названного в соответствии с вашей активностью, в этом случае SecondActivityArgs в верхней части вашего класса активности:
val args: SecondActivityArgsby by navArgs()
и затем вы можете использовать его так:
print(args.testArgument)