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

如何通过Fragment内的按钮隐藏该Fragment并返回主Activity?

从Fragment返回主Activity的最优方案

首先,你之前用replace方式替换Fragment时,建议先把当前事务加入回退栈,这样后续可以通过标准的回退操作返回,这是更符合Android组件设计规范的方案:

第一步:在主Activity添加Fragment时加入回退栈

修改你原有的FragmentTransaction代码,增加addToBackStack(null)将事务存入回退栈:

String scoreText; 
Scooore myFragment = new Scooore();

FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
Bundle data = new Bundle();
data.putString("score", scoreText);
myFragment.setArguments(data);
// 加入回退栈,让Fragment可以被正常回退
fragmentTransaction.replace(R.id.showScore, myFragment).addToBackStack(null).commit();

第二步:在Fragment的按钮点击事件中执行回退操作

在Scooore Fragment的按钮OnClickListener里,有两种标准实现方式:

方案1:直接调用FragmentManager的回退方法

backBtn.setOnClickListener(v -> {
    getParentFragmentManager().popBackStack();
});

如果是AndroidX之前的旧版本,用getFragmentManager()替代getParentFragmentManager()即可。

方案2:触发宿主Activity的返回键逻辑

backBtn.setOnClickListener(v -> {
    if (getActivity() != null) {
        getActivity().onBackPressed();
    }
});

这种方式和用户按系统返回键的效果完全一致,适合需要统一返回行为的场景。

为什么这两种方案更优?

  • 避免了new Intent重启主Activity带来的额外性能开销和生命周期重复触发问题
  • 比设置FrameLayout.setVisibility更规范,不会残留Fragment实例导致内存泄漏
  • 能正确维护Fragment的回退栈状态,和系统交互逻辑保持一致,提升用户体验

内容的提问来源于stack exchange,提问作者newTy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 14:05:35