记录一下fragment切换不会被回收的方法

一般我们切换fragment都用replace方法实现,但是这样的做法是有缺点的,当你从这个fragment切换到另一个fragment 的时候当前的fragment会被系统回收掉,当你再次切换此fragment的时候就要重新加载数据了,这样子用户体验不好

public void startFragmentAdd(Fragment fragment) {
    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.replace(R.id.main_layout, fragment, fragment.getClass().getName())
        .commit();
}

因为replace()方法只是在上一个Fragment不再需要时采用的简便方法。因此,每次切换的时候,Fragment都会重新实例化,重新加载数据。

如果要实现Fragment 切换时不重新实例化,正确的切换方式是add(),切换时hide()当前,add()另一个Fragment;再次切换时,只需hide()当前,show()另一个。

// fragment的切换
private void startFragmentAdd(Fragment fragment) {
    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager
         .beginTransaction();
    if (current_fragment == null) {
        fragmentTransaction.add(R.id.main_layout, fragment).commit();
        current_fragment = fragment;
    }
    if (current_fragment != fragment) {
        // 先判断是否被add过
        if (!fragment.isAdded()) {
            // 隐藏当前的fragment,add下一个到Activity中
            fragmentTransaction.hide(current_fragment)
                  .add(R.id.main_layout, fragment).commit();
        } else {
            // 隐藏当前的fragment,显示下一个
            fragmentTransaction.hide(current_fragment).show(fragment)
                  .commit();
        }
        current_fragment = fragment;
    }
}

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值