可以看到,我们定义了一个全局Fragment,currentFragment,用来标示当前是哪一个Fragment。其中initFragment()方法只是为了初始化所有的Fragment,相信大家也看得出来,最主要的方法是showFragment(),下面我就来说一下这个方法: 1/**271 * 展示Fragment372*/473privatevoidshowFragment(Fragment fragment) {574if(currentFragment!
一般我们在使用add+show+hide去显示、隐藏fragment或者fragment嵌套使用、viewpager+fragment结合使用等场景下,如果不进行懒加载会导致多个fragment页面的生命周期被调用,每个页面都进行网络请求这样会产生很多无用的请求,因为实际显示的只是用户看到的那个页面,其他页面没有必要在这个时候去加载数据。 二、fragment懒加载 懒...
ft.show(fragment2); }break;caseR.id.merchant_manager:if(fragment3 ==null) { fragment3 =newFragment3(); ft.add(R.id.container, fragment3, fragment3Tag); }else{ ft.show(fragment3); }break;caseR.id.setting:if(fragment4 ==null) { fragment4 =newFragment4(); ft.add(R.id.container, ...
replace(int containerViewId, Fragment fragment):替换containerViewId中的Fragment实例。注意,它首先把containerViewId中所有Fagment删除,然后再add进去当前的Fragment 实例。 hide(Fragment fragment):隐藏当前的Fragment,仅仅是设为不可见,并不会销毁。 show(Fragment fragment):显示之前隐藏的Fragment。 detach(Fragment ...
fragmentTransaction.add(R.id.main_tab_fl, homeFragment); fragmentTransaction.replace(R.id.main_tab_fl,homeFragment); fragmentTransaction.commit(); 1. 2. 3. 4. 5. 6. 1、先看第一行 FragmentManager fragmentManager = getSupportFragmentManager(); ...
fragment.arguments = Bundle().apply { putString("hello", "fragment:${count++}") } supportFragmentManager.beginTransaction().add(R.id.root, fragment).commitNow() } Activity 显示的同时Fragment也显示了,一切看起来很正常,此时我们将手机横竖屏切换一下: ...
正确的切换方式是 add(),切换时 hide(),add()另一个 Fragment;再次切换时,只需 hide()当前,show()另一个。这样就能做到多个 Fragment 切换不重新实例化。 replace()这个方法只是在上一个 Fragment不再需要时采用的简便方法. 6.2 FragmentManager 的 replace和 add 两种方法切换 Fragment 时有什么不同 ...
add+show+hide 模式下的老方案 在没有添加懒加载之前,只要使用add+show+hide的方式控制并显示 Fragment, 那么不管 Fragment 是否嵌套,在初始化后,如果只调用了add+show,同级下的 Fragment 的相关生命周期函数都会被调用。且调用的生命周期函数如下所示:
add的时候应该判断该fragment是否存在,如果处在就直接show,如果不存在才new一个。
fragment的一些信息 fragment只能嵌套在activity中,不能独立存在 fragment也有自己的生命周期,但也正因为fragment依存于activity,所以activity的生命周期可以直接影响到fragment 优点 fragment的可复用性,多个activity可以复用同一个fragment fragment切换流畅,轻量切换,不像activity切换那么笨重 ...