android - 带有 Navigation 组件的 Android popper 导航
问题描述
我有两个片段FirstFragment和WelcomeFragment,
在FirstFragment我有一些动画,我从服务器加载数据,然后我使用 NavController 导航到WelcomeFragment:
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 但在按下后退按钮时无法返回到 FirstFragment 应用程序应该像按下主页按钮一样关闭,并且在返回时停留在 WelcomeFragment
从我在 nav_graph XML 中尝试的文档中:
app:popUpTo="@id/firstFragment"
app:popUpToInclusive="true"
该应用程序关闭但是当我回到它时,它确实从 FirstFragment 重新开始,并且没有保持我想要的状态,即留在 WelcomeFragment
从其他问题我也在 WelcomeFragment 中尝试过这个:
navController.popBackStack(R.id.firstFragment, true);
任何人都可以帮助我实现想要的行为
编辑 :
我最终拦截了 onKeyDown 并在我的WelcomeFragment上按下 onKeyDown 时模拟主页点击
这在我的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();
}
这在我的活动中:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
((WelcomeFragment) WelcomeFragment).myOnKeyDown(keyCode, this);
return false ;
}
这给了我我想要的行为,但我认为这不是最佳做法
解决方案
推荐阅读
- reactjs - 如何快速更改 ApexCharts 条的宽度?
- python - 超时或错误后重新运行 python 脚本
- mysql - laravel 中的两个表连接和计算第二个表列
- google-cloud-platform - 使用 Ansible GKE 模块修改 gke 集群参数
- javascript - 单击链接后如何避免左侧栏菜单折叠?mvc
- css - 如何在 Laravel 8 的邮件模板上应用 CSS 规则?
- flutter - Flutter 和 DIO:HandshakeException:握手期间连接终止
- javascript - c# winform webview2 如何获取getelementbyid焦点?
- html - Flexbox 儿童身高跟随特定儿童
- python - python中的正则表达式,找到依赖于新行数的东西