首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【Android】使用FragmentManager动态添加片段

【Android】使用FragmentManager动态添加片段

作者头像
三三是该溜子
发布2025-08-26 08:15:27
发布2025-08-26 08:15:27
9100
代码可运行
举报
文章被收录于专栏:该溜子的专栏该溜子的专栏
运行总次数:0
代码可运行
三三要成为安卓糕手

上一篇文章,我们是在xml中静态添加fragment,但是一些修改或者其他事情是做不了的;

本章我们达成在java代码中灵活添加、删除、替换fragment操作

一:核心代码展示

简单做一个这种页面

代码语言:javascript
代码运行次数:0
运行
复制
public class FragmentActivity extends AppCompatActivity implements View.OnClickListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fragment);

        findViewById(R.id.btn_add).setOnClickListener(this);
        findViewById(R.id.btn_remove).setOnClickListener(this);
        findViewById(R.id.btn_replace).setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        MyFragment myFragment = new MyFragment();

        //获取管理器,开始事务
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

        if(v.getId() == R.id.btn_add){
            //获取管理器,开始事务

            fragmentTransaction.add(R.id.fcv, myFragment,"tag_myFragment");
            //提交事务
            fragmentTransaction.commit();

        } else if (v.getId() == R.id.btn_remove) {
            //方式二:id移除,优先用这个
            Fragment fragment = fragmentManager.findFragmentById(R.id.fcv);
            fragmentTransaction.remove(fragment);
            fragmentTransaction.commit();

            //方式一:直接移除
//            fragmentTransaction.remove(myFragment);
            //方式三:tag移除法
//            fragmentTransaction.remove(fragmentManager.findFragmentByTag("tag_myFragment"));

        } else if (v.getId() == R.id.btn_replace) {
            fragmentTransaction.replace(R.id.fcv,new BlueFragment(),"tag_BlueFragment");
            fragmentTransaction.commit();
        }
    }
}

1:三种移除方式

  • 直接移除new出来的fragment
  • id移除,通过FragmentContainer去移除,泛用性更好最推荐。理解成所有Fragment都会抵达的总站,在这里管理更方便
  • tag移除,这是Fragment的一个标签

2:获取管理器和开始事务

这两行代码尽量不要提取成方法成员变量,避免一些未知错误

代码语言:javascript
代码运行次数:0
运行
复制
        //获取管理器,开始事务
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
		fragmentTransaction.add(R.id.fcv, myFragment,"tag_myFragment");

在这段代码中,通过 fragmentTransaction.add(R.id.fcv, myFragment, "tag_myFragment") 这行代码,是将 myFragment 这个 Fragment 实例添加到了 idfcv 的容器,从而实现把 myFragment 对应的布局关联到 R.id.fcv 这个容器里,让 myFragment 的界面能够在该容器所在的位置显示出来。

一句话总结:把myFragment布局关联到R.id_fcv这个FragmentContainer中

(1)getSupportFragmentManager()

自定义启动类继承AppCompatActivity;又继承FragmentActivity

getSupportFragmentManager()是FragmentActivity中提供的方法在当前类中直接获取Fragment管理器

(2)使用事务

开始事务

将当前某个Activity关联控件当中

第一个参数,第二个参数:你要添加的是哪个Fragment,第三个参数:要添加的Fragment在FragmentManager当中的TAG是什么(性能更好)

3:效果

4:注意事项

每次处理完事务Transaction后记得要commit

二:替换的Fragment代码展示

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1:为什么更推荐用id移除

添加红色,替换为蓝色,移除掉蓝色,就会出现bug;因为当前不是tag_myFragment了而是蓝色view,那还移除个蛋

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-08-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一:核心代码展示
  • 1:三种移除方式
  • 2:获取管理器和开始事务
    • (1)getSupportFragmentManager()
    • (2)使用事务
  • 3:效果
  • 4:注意事项
  • 二:替换的Fragment代码展示
    • 1:为什么更推荐用id移除
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档