一个Activity里面多个Fragment使用的情景
展开全部
最近在公司做了一个项目是一个Activity里面多个Fragment使用的情景,如下图所示:
1、在这里我的项目高概率会再次使用当前的Fragment,我使用的是使用show(),hide(),可以提高性能。
show(),hide()最终是让Fragment的ViewsetVisibility(true还是false),不会调用生命周期;
replace()的话会销毁视图,即调用onDestoryView、onCreateView等一系列生命周期;
add()和replace()不要在同一个阶级的FragmentManager里混搭使用。
注意:如果你的app有大量图片,这时更好的方式可能是replace,配合你的图片框架在Fragment视图销毁时,回收其图片所占的内存。
2、fragment之间的通信我用的是EventBus,但是当你在一个fragment跳转到一个还未初始化的fragment时,未初始化的fragment里面eventBus 的方法是不走的,接受不到信息的。你可以oncreate方法里处理一下。
3、当某个fragment要求每次页面可见时,该页面会刷新数据的时候,由于我使用的是show(),hide(),此时生命周期不在重走,在onResume或者setUserVisibleHint方法都不会调用,解决方法是在 切换fragment的时候,让你想要刷新的fragment调用frag.setUserVisibleHint(true); 这个时候Fragment类的重写的setUserVisibleHint()方法就会被调用。
1、在这里我的项目高概率会再次使用当前的Fragment,我使用的是使用show(),hide(),可以提高性能。
show(),hide()最终是让Fragment的ViewsetVisibility(true还是false),不会调用生命周期;
replace()的话会销毁视图,即调用onDestoryView、onCreateView等一系列生命周期;
add()和replace()不要在同一个阶级的FragmentManager里混搭使用。
注意:如果你的app有大量图片,这时更好的方式可能是replace,配合你的图片框架在Fragment视图销毁时,回收其图片所占的内存。
2、fragment之间的通信我用的是EventBus,但是当你在一个fragment跳转到一个还未初始化的fragment时,未初始化的fragment里面eventBus 的方法是不走的,接受不到信息的。你可以oncreate方法里处理一下。
3、当某个fragment要求每次页面可见时,该页面会刷新数据的时候,由于我使用的是show(),hide(),此时生命周期不在重走,在onResume或者setUserVisibleHint方法都不会调用,解决方法是在 切换fragment的时候,让你想要刷新的fragment调用frag.setUserVisibleHint(true); 这个时候Fragment类的重写的setUserVisibleHint()方法就会被调用。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询