2021-11-18 使用FragmentTransaction切换Fragment显示

平时界面框架中使用fragment都是使用viewpager+tab的方式做切换,有时候使用fragment的场景这种方式不适用,比如切换分类显示等。

现在的场景是在界面右上角有个按钮,默认使用点位Fragment显示,点击按钮切换点位Fragment和列表Fragment显示。

定义切换fragment的函数,传递切换的参数(就是你要显示哪个fragment),函数的功能就是根据参数切换fragment显示。

  1. 拿到FragmentTransaction 对象
  2. 创建所有的fragment
  3. 根据传递的参数判断显示哪个fragment
  4. 提交事务
  5. 后面的部分就是业务了,在这里记录了当前显示的模式和切换模式按钮的显示图标

在这里记录一下,使用add、hide、show控制fragment时界面会出现fragment重复显示,像是有多个实例,看了一下也每发现咋回事,估计是哪里每处理好。所以在这里使用了replace切换,但是replace切换时会重新创建,所以根据业务场景选择使用吧。

private void initFragment(int mode) {
    //创建fragment事务对象
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

    //创建几个需要切换的fragment
    EquipmentsModeListFragment fragmentList = null;
    if (fragmentList == null) {
        fragmentList = new EquipmentsModeListFragment();
    }

    EquipmentsModePointFragment fragmentPoint = null;
    if (fragmentPoint == null) {
        fragmentPoint = new EquipmentsModePointFragment();
    }

    //显示需要切换的fragment
    //这里提一下,在使用add()和hide()做切换时出现了fragment实例重复创建并显示的问题,不知道咋回事,所以使用replace切换显示
    //但是使用replace时,是移除FragmentTransaction里面所有的fragment并且重新创建一个实例
    switch (mode) {
        case MODE_LIST:
            transaction.replace(R.id.c_mode,fragmentList);
            break;
        case MODE_POINT:
            transaction.replace(R.id.c_mode,fragmentPoint);
            break;
    }

    //提交事务
    transaction.commit();

    //记录当前的显示模式
    currentMode = mode;

    //切换显示图标
    if (currentMode==MODE_LIST){
        mBtnMode.setBackgroundResource(R.drawable.btn_list_selector_this);
    } else if (currentMode==MODE_POINT){
        mBtnMode.setBackgroundResource(R.drawable.btn_point_selector_this);
    }
}

在切换按钮的点击事件中判断当前显示的模式而确定该显示哪一个。

case R.id.btn_mode:
    if (currentMode != MODE_POINT) {
        initFragment(MODE_POINT);
    } else if (currentMode != MODE_LIST) {
        initFragment(MODE_LIST);
    }
    break;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值