fragment空白问题

本文介绍了在Android中遇到Fragment空白问题的常见原因及解决方法,包括检查savedInstanceState、防止onCreateView被多次调用以及避免每次都创建新的Fragment实例。通过优化Fragment的添加方式和使用单例模式,可以有效避免Fragment显示为空白。

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

如果遇到fragment空白,那么亲请往下面定位:

1.通常这种问题出现是因为客户端长时间放在后台或者被360等软件清除了内存,看看savedInstanceState能不能帮你做什么,如果不行,直接放弃,看第二种情况;

2:看看是不是你的oncreateview又被走了一次,如果走了多次界面会空白的,下面方法可以帮你解决(方法转自http://www.eoeandroid.com/thread-538855-1-1.html  6楼的兄弟)


@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        if(mRootView == null) {
            mRootView = inflater.inflate(R.layout.xxx, container, false);
        }

        if(mRootView != null) {
            ViewGroup parent = (ViewGroup) mRootView.getParent();
            if(parent != null) {
                parent.removeView(mRootView);
            }
        }
        
        return mRootView;
    }


3:这种解决方案最好办:

首先看看你的添加方式是不是以每次new了一个实例去做的:

mFragments = new ArrayList<Fragment>(4);
mFragments.add(new fragment1());
mFragments.add(new fragment2());
mFragments.add(new fragment3());
for (int i = 0; i < mFragments.size(); i++) {
getChildFragmentManager()
.beginTransaction()
.add(R.id.ll_fragmentcontainer, mFragments.get(i),
String.valueOf(i)).commit();
}

如果是这样玩的,那么请注意不要用getActivity().getSupportFragmentManager().beginTransaction();来开启事务,用getChildFragmentManager().beginTransaction();就好。

推荐fragment直接使用单例来添加,不要用新实例。

mFragments.add(new Fragment1.newInstance);,如果不明怎么将fragment单例化的,百度之。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值