android Fragment相关问题

本文介绍了在Android开发中优化Fragment切换的方法,避免使用replace以提高性能,改用hide和show。同时,针对Fragment重叠问题,提出了通过重写onSaveInstanceState不保存状态的解决方案。另外,为了解决getActivity为空的问题,建议在onAttach中初始化Activity引用。对于fragment嵌套导致的崩溃,推荐在onDetach中清理mChildFragmentManager。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.fragment的切换
以前做项目时,fragment切换总是用replace方法,这样对性能影响很大,所以换一种方式用hide和show方法进行展示。
首先定义一个全局的currentFragment

“`
private Fragment currentFragment = new Fragment();
private FragmentTransaction switchFragment(Fragment targetFragment) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
if(!targetFragment.isAdded()){

            if(currentFragment != null){
                transaction.hide(currentFragment);
            }
            transaction.add(R.id.ll_main,targetFragment,targetFragment.getClass().getName());
        }else{

            transaction.hide(currentFragment).show(targetFragment);
        }
        currentFragment = targetFragment;
    return transaction;
}


然后再在切换button上直接调用即可
switchFragment(oneFg).commit();
如果想要刷新数据的话,可以利用fragment的隐藏方法:
@Override
public void onHiddenChanged(boolean hidden) {
super.onHiddenChanged(hidden);

    if(hidden){ //隐藏

    }else{      //显示

    }
}

2.fragment重叠
hide和show容易出现fragment重叠现象
解决方法:
通过重写 宿主activity的onSaveInstanceState 方法,然后不保存状态
@Override
protected void onSaveInstanceState(Bundle outState) {
// super.onSaveInstanceState(outState);
}
3.getActivity为空
解决方法:
Activity activity;
@Override
public void onAttach(Context context) {
super.onAttach(context);
activity = (Activity) context;
}
4.fragment嵌套
fragment嵌套经常出现崩溃
解决方法:
宿主fragment 使用getChildFragmentManager();
在宿主fragment中:
@Override
public void onDetach() {
super.onDetach();
try {
//参数是固定写法
Field childFragmentManager = Fragment.class.getDeclaredField(“mChildFragmentManager”);
childFragmentManager.setAccessible(true);
childFragmentManager.set(this, null);
} catch (NoSuchFieldException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值