android中tabhost+fragment为什么重复加载两次

 我来答
huanglenzhi
2014-12-27 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
采纳数:117538 获赞数:517198
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。

向TA提问 私信TA
展开全部
  最近使用FragmentTabHost,发现每次切换fragment就会调用 onDestroyView,切换回来时会调用onCreateView。但是有个需求要每次切换时不要重新加载一遍view,想了一些办法,也在网上找了一些方法,发现这个方法是最好的。使用了一下,确实挺好用的。 解决办法:在Fragment onCreateView方法中缓存View

[mw_shl_code=java,true] private View rootView;//缓存Fragment view

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if(rootView==null){
rootView=inflater.inflate(R.layout.tab_fragment, null);
}
//缓存的rootView需要判断是否已经被加过parent, 如果有parent需要从parent删除,要不然会发生这个rootview已经有parent的错误。
ViewGroup parent = (ViewGroup) rootView.getParent();
if (parent != null) {
parent.removeView(rootView);
}
return rootView;
}[/mw_shl_code]

  转载
百度网友49ea9d824
2015-07-23 · TA获得超过1205个赞
知道小有建树答主
回答量:179
采纳率:100%
帮助的人:76.2万
展开全部
使用FragmentTabHost,发现每次切换fragment就会调用 onDestroyView,切换回来时会调用onCreateView。但是有个需求要每次切换时不要重新加载一遍view,想了一些办法,也在网上找了一些方法,发现这个方法是最好的。使用了一下,确实挺好用的。 解决办法:在Fragment onCreateView方法中缓存View

[mw_shl_code=java,true] private View rootView;//缓存Fragment view

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if(rootView==null){
rootView=inflater.inflate(R.layout.tab_fragment, null);
}
//缓存的rootView需要判断是否已经被加过parent, 如果有parent需要从parent删除,要不然会发生这个rootview已经有parent的错误。
ViewGroup parent = (ViewGroup) rootView.getParent();
if (parent != null) {
parent.removeView(rootView);
}
return rootView;
}[/mw_shl_code]
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式