使用Fragment,每次显示Fragment的时候都要回调onCreateView()这个比较费时的方法么?
当创建一个Fragment
时,必须得重写public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
这个方法返回界面内容。
在这里做的界面上的设置算是比较费时的,但是不管是使用Activity
和replace
方法或是ViewPager
加FragmentPageAdapter
系统都会销毁Fragment
(走到onDestroyView()
),然后再创建onCreateView()
。
我现在的疑问就是Android
为什么要这么设计Fragment
呢,很多应用的首页都是使用Fragment
和标签切换的,如果这么做岂不是浪费CPU而且切换会不流畅?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
FragmentPagerAdapter实现将Fragment detach和attach, 因为Android认为如果一个Fragment不需要展示, 则需要将UI从整个View树下移除, 这样才不会造成界面元素过多, 绘制时间增长, 导致界面卡顿. 你可以在你的Fragment里面用一个变量在onDestoryView的时候将View保存下来, 然后在下一次onCreateView的时候, 判断该变量是否为空, 如果不为空则直接返回该变量, 而不是从新创建View
onCreateView 只是负责创建页面,没理由数据加载也放在里面嘛
试试下面参考链接的思路:
切换Fragment时避免UI重新加载
可以使用show()和hide()方法 每次执行逻辑的时候将所有fragment全部隐藏 之后判断fragment实例是否已经存在 存在 调用show()方法 不存在实例化相应fragment并add() 这样可以减少fragment实例的创建。FragmentPagerAdapter的情况 fragment页数多的时候使用FragmentStatePagerAdapter。
除了replace,还有hide, show方法,ViewPager + Fragment,adapter用FragmentStatePagerAdapter,可以避免大多数情况下Fragment被销毁重建。
如果费时则说明你写的代码有问题,那样会阻塞界面。