Fragment的onCreateView方法注意点

系统会在片段首次绘制其用户界面时调用onCreateView方法。 要想为您的片段绘制 UI,您从此方法中返回的 View 必须是片段布局的根视图。如果片段未提供 UI,您可以返回 null。

Fragment默认有预加载的功能,默认是预加载左右各一个fragment实例,在预加载的时候会调用onCreateView 方法,当切换Fragment的时候会调用onDestoryView, 但是并不会调用onDestory方法销毁掉fragmen实例。再重新来回切换多个Fragment的时候会重新调用OnCreateView绘制界面。这样就存在多次绘制初始化视图的可能。

解决办法如下(直接贴上相关代码分析):

public class OwnerFragment extends BaseFragment {
	private View rootView; // 设置为全局的
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
		if (null != rootView) {  
			ViewGroup parent = (ViewGroup) rootView.getParent();
			if (null != parent) {
				parent.removeView(rootView);
			}
		} else {  // 如ongoing果rootView为空 ,就实例化该视图
			rootView = inflater.inflate(R.layout.owner_theme_idle_fragment, container,false);
		    return rootView;
	}

当rootView不为空时,需要做以下处理,把rootview已经绑定的父视图去掉。因为一个视图只能只能有一个父控件(rootView 经过这个方法返回之后会添加到fragment的视图上)

if (null != rootView) {  
			ViewGroup parent = (ViewGroup) rootView.getParent();
			if (null != parent) {
				parent.removeView(rootView);
			}
		}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值