You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何点击按钮关闭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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 22:36:03