У меня есть два фрагмента FirstFragment и WelcomeFragment ,
в FirstFragment У меня есть анимация, и я загружаю данные с сервера, затем я перехожу на WelcomeFragment с использованием NavController:
navController.navigate(R.id.action_firstFragment_to_welcomeFragment);
, а мой nav_graph выглядит следующим образом:
<fragment
android:id="@+id/firstFragment"
android:name="com.flyeducation.UI.FirstFragment"
android:label="fragment_first"
tools:layout="@layout/fragment_first">
<action
android:id="@+id/action_firstFragment_to_welcomeFragment"
app:destination="@id/welcomeFragment"
app:enterAnim="@anim/fade_in"
app:exitAnim="@anim/fade_out"
app:popEnterAnim="@anim/fade_in"
app:popExitAnim="@anim/fade_out" />
</fragment>
Я хочу, чтобы у него было такое поведение:
переход от FirstFragment к WelcomeFragment, но без возможности go вернуться к FirstFragment при нажатии кнопки «Назад» приложение должно закрываться, как при нажатии кнопки «Домой», а при возврате остается в WelcomeFragment
из документации, которую я пробовал в nav_graph XML:
app:popUpTo="@id/firstFragment"
app:popUpToInclusive="true"
, приложение закрывается, но когда я go возвращается к нему, оно запускается заново с FirstFragment и не поддерживая состояние, которое я хочу, которое остается в WelcomeFragment
из других вопросов, я также пробовал это в WelcomeFragment:
navController.popBackStack(R.id.firstFragment, true);
Кто угодно может lp мне удалось достичь желаемого поведения
EDIT:
Я закончил тем, что перехватил onKeyDown, а также имитировал щелчок по дому, когда он onKeyDown нажимается на моем WelcomeFragment
Это в моем WelcomeFragment
public void myOnKeyDown(int key_code, Context context){
openDialog(context);
}
public void openDialog(final Context context) {
new AlertDialog.Builder(context)
.setTitle("Exit ! ")
.setMessage("Are you sure you wanna quit our App , we will miss you !")
.setNegativeButton(android.R.string.cancel, null) // dismisses by default
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent i = new Intent(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_HOME);
context.startActivity(i);
}
})
.create()
.show();
}
и это в моем Activity :
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
((WelcomeFragment) WelcomeFragment).myOnKeyDown(keyCode, this);
return false ;
}
Это дало мне то поведение, которое я хочу, но не думаю, что это лучшая практика