Android Fragment切换不刷新不销毁的方法
程序员文章站
2022-02-07 12:24:56
...
90%以上的App都会用到Fragment、那么切换Fragment就很常见了、一般情况下我们在项目中需要进行Fragment的切换、一直都是用replace()方法来替换Fragment、比如入下代码
public void switchContent(Fragment fragment) { if(mContent != fragment) { mContent = fragment; mFragmentMan.beginTransaction() .setCustomAnimations(android.R.anim.fade_in, R.anim.slide_out) .replace(R.id.content_frame, fragment) // 替换Fragment,实现切换 .commit(); } }
但是、这样会有一个问题、每次切换的时候、Fragment都会重新实例化、重新执行onCreateView()方法、重新加载一边数据、这样非常消耗性能和用户的数据流量、所以就在想、如何让多个Fragment彼此切换时不重新实例化?
翻看了Android官方Doc、和一些组件的源代码、发现replace()这个方法只是在上一个Fragment不再需要时采用的简便方法、正确的切换方式是add()、切换时hide()、add()另一个Fragment、再次切换时、只需hide()当前、show()另一个、这样就能做到多个Fragment切换不重新实例化、代码如下
public void switchContent(Fragment from, Fragment to) { if (mContent != to) { mContent = to; FragmentTransaction transaction = mFragmentMan.beginTransaction().setCustomAnimations( android.R.anim.fade_in, R.anim.slide_out); if (!to.isAdded()) { // 先判断是否被add过 transaction.hide(from).add(R.id.content_frame, to).commit(); // 隐藏当前的fragment,add下一个到Activity中 } else { transaction.hide(from).show(to).commit(); // 隐藏当前的fragment,显示下一个 } } }
使用上面的方法就能避免Fragment在切换的时候再次调用onCreateView()的问题
推荐阅读
-
nohup后台启动Python脚本,log不刷新的解决方法
-
asp查询xml的代码 不刷新页面查询的方法
-
Android开发使用Activity嵌套多个Fragment实现横竖屏切换功能的方法
-
Android中Fragment相互切换间不被回收的实现方法
-
jquery ajax多次请求数据时 不刷新问题的解决方法
-
FragmentStatePagerAdapter.notifyDataSetChanged不刷新页面的解决的方法
-
linux环境配置nginx导致页面不刷新的解决方法
-
解决Android使用MediaPlayer只播放视频不播放音频的方法
-
unity 切换场景不销毁物体问题的解决
-
Vue + Vue-router 同名路由切换数据不更新的方法