如何点击按钮关闭BottomSheetDialogFragment并返回OrderYourFoodFragment
实现方案
你只需要在BottomRedFragment的按钮点击逻辑中调用系统提供的dismiss()方法即可关闭底部弹窗,自动退回到下层的OrderYourFoodFragment,无需额外的页面跳转逻辑。以下是具体实现步骤:
1. 仅需关闭弹窗,无需回传数据的场景
直接在BottomRedFragment的按钮点击事件中执行完业务逻辑后调用dismiss()即可:
// 以下代码写在BottomRedFragment的onViewCreated方法中 Button targetBtn = view.findViewById(R.id.你的按钮id); targetBtn.setOnClickListener(v -> { // 在此处编写按钮点击需要执行的对应业务逻辑 // 逻辑执行完成后调用dismiss关闭弹窗 dismiss(); });
dismiss()是DialogFragment自带的API,调用后会自动将弹窗实例从FragmentManager中移除,下层的OrderYourFoodFragment会自动恢复显示。
2. 关闭弹窗同时需要给OrderYourFoodFragment回传数据/触发父Fragment逻辑的场景
推荐使用官方推荐的Fragment Result API实现通信,无需额外定义接口,实现更简洁:
步骤1:在OrderYourFoodFragment中注册结果接收器
在你弹出BottomRedFragment的逻辑附近(或onViewCreated生命周期中)添加接收器注册代码:
// 注册结果接收器,requestKey可自定义,需和后续子Fragment发送时的key保持一致 getChildFragmentManager().setFragmentResultListener("red_fragment_result", this, (requestKey, result) -> { // 此处可获取子Fragment回传的参数,按需处理 String returnData = result.getString("extra_data"); // 在此处编写父Fragment需要执行的后续逻辑,比如刷新UI、更新数据等 });
你原有的弹窗触发逻辑不需要改动,保持原样即可。
步骤2:在BottomRedFragment中发送结果后关闭弹窗
修改按钮点击逻辑,先打包需要回传的数据,发送后再调用dismiss:
Button targetBtn = view.findViewById(R.id.你的按钮id); targetBtn.setOnClickListener(v -> { // 在此处编写按钮点击需要执行的对应业务逻辑 // 打包需要回传给父Fragment的数据 Bundle result = new Bundle(); result.putString("extra_data", "需要回传的内容"); // 发送结果,requestKey需和父Fragment注册的key完全一致 getParentFragmentManager().setFragmentResult("red_fragment_result", result); // 关闭弹窗 dismiss(); });
注意事项
不要通过调用getActivity().onBackPressed()的方式关闭弹窗,该操作可能会触发Activity的返回逻辑,误关上层其他页面,直接调用dismiss()是DialogFragment关闭的标准实现。
内容的提问来源于stack exchange,提问作者gauravmandall
相关产品推荐
相关产品推荐

