扫码关注官方订阅号
ringa_lee
FragmentPagerAdapter实现将Fragment detach和attach, 因为Android认为如果一个Fragment不需要展示, 则需要将UI从整个View树下移除, 这样才不会造成界面元素过多, 绘制时间增长, 导致界面卡顿. 你可以在你的Fragment里面用一个变量在onDestoryView的时候将View保存下来, 然后在下一次onCreateView的时候, 判断该变量是否为空, 如果不为空则直接返回该变量, 而不是从新创建View
onCreateView 只是负责创建页面,没理由数据加载也放在里面嘛
试试下面参考链接的思路:切换Fragment时避免UI重新加载
private View rootView;// 缓存Fragment view @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Log.i(TAG, "onCreateView"); if (rootView == null) { rootView = inflater.inflate(R.layout.fragment_1, null); } // 缓存的rootView需要判断是否已经被加过parent,如果有parent需要从parent删除,要不然会发生这个rootview已经有parent的错误。 ViewGroup parent = (ViewGroup) rootView.getParent(); if (parent != null) { parent.removeView(rootView); } return rootView; }
可以使用show()和hide()方法 每次执行逻辑的时候将所有fragment全部隐藏 之后判断fragment实例是否已经存在 存在 调用show()方法 不存在实例化相应fragment并add() 这样可以减少fragment实例的创建。FragmentPagerAdapter的情况 fragment页数多的时候使用FragmentStatePagerAdapter。
`... FragmentUtil.hideFragment(fragmentTransaction,testFragment); .... if (testFragment != null) { fragmentTransaction.show(testFragment); } else { testFragment = new TestFragment(); fragmentTransaction.add(R.id.container_linear, testFragment); } .... public static void hideFragment(FragmentTransaction ft, Fragment... params) { if (ft!=null&¶ms != null && params.length > 0) { for (int i = 0; i < params.length; i++) { if (params[i] != null) { ft.hide(params[i]); } } } } `
除了replace,还有hide, show方法,ViewPager + Fragment,adapter用FragmentStatePagerAdapter,可以避免大多数情况下Fragment被销毁重建。
如果费时则说明你写的代码有问题,那样会阻塞界面。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
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被销毁重建。
如果费时则说明你写的代码有问题,那样会阻塞界面。