android-studio - 实现 OnBackPressedCallback 后获取默认 onBackPressed
问题描述
我有一个片段,每当启动 onBackPressed 时,我都会在其中显示一个对话框。我遇到的问题是,在我的片段中实现了 onBackPressed 方法后,MainActivity 中的 onBackPressed 不再有效。如何使我的片段中的 onBackPressed 执行不同的操作,但仍然让 MainActivity on back press 方法正常工作,这样它就不会影响 MainActivity 之上的其他片段。这意味着我不必去每个片段来实现 onBackPressed。我正在使用导航架构组件
下面是我如何在我的片段中实现 onBackPressedCallback
requireActivity().getOnBackPressedDispatcher().addCallback(requireActivity(),
new OnBackPressedCallback(true) {
@Override
public void handleOnBackPressed() {
new AlertDialog.Builder(requireActivity())
.setMessage("You have not finished uploading data")
.show();
}
});
下面是我在 MainActivity 中的 onBackPressed 方法,当你点击它两次时调用 onBackPressed 它应该在按下回调之前显示一个 toast
private static final int BACK_PRESS_TIME_INTERVAL = 2000;
private long backPressTime;
@Override
public void onBackPressed() {
NavHostFragment navHostFragment = (NavHostFragment) getSupportFragmentManager()
.findFragmentById(R.id.nav_host_fragment);
if (navHostFragment != null && navHostFragment.getChildFragmentManager().getBackStackEntryCount() == 0) {
if (backPressTime + BACK_PRESS_TIME_INTERVAL > System.currentTimeMillis()) {
super.onBackPressed();
return;
} else {
Toast.makeText(getBaseContext(), "Press back again to exit", Toast.LENGTH_SHORT).show();
}
backPressTime = System.currentTimeMillis();
} else {
super.onBackPressed();
}
}
我遇到的问题是我的片段中的 onBackPressedCallback 覆盖了每个片段的后按,甚至覆盖了我的主要活动中的 onBackPressed 方法。我怎样才能让它只影响我只实现的特定片段
解决方案
推荐阅读
- c++ - GL_SHADER_STORAGE_BUFFER 位置是否与其他着色器位置冲突?
- swift - 在 UserDefault 问题中保存自定义字典
- java - 地图
> 可能不包含字符串类型的值 - python - 在 Python 中将元组列表导出到 csv
- javascript - 路由拆分成多个文件时,Route Component 多次渲染
- css - 如何让动态内容居中且宽度相同的孩子与flex?
- angular - 如何将角度模态附加到按钮单击
- python - 逐个单元格地比较两个数据帧的完整矩阵
- javascript - React Router 警告 Render 方法应该是 props 和 state 的纯函数
- javascript - 解构并返回多个值