心里种花,人生才不会荒芜,如果你也想一起成长,请点个关注吧。 在Android的开发中,Fragment是一个非常强大的组件,用于在单个活动中组成模块化的UI。...Fragment有多个生命周期方法,你可以重写它们以完成必要的初始化和清理。有些方法和状态判断可以帮助你了解Fragment当前的状态。...onActivityCreated(): 当Fragment的宿主Activity已完成其onCreate()方法时被调用。 此时可确保Activity和Fragment的视图都已完全初始化。...onStart(): 当Fragment对用户是可见时调用,此时Fragment处于“可见但未获取焦点”的状态。 onResume(): 当Fragment进入“活动”状态并且与用户交互时调用。...判断onCreateView()是否已调用的方法 在Android Fragment架构中,没有直接的方法来检测onCreateView()是否被调用。
(5) 提交事务,调用commit() 方法来完成。 这样就完成了在活动中动态添加碎片的功能,重新运行程序,可以看到和之前相同的界面,然后点击一下按钮,效果如图4.6所示。 ?...你可以看出,碎片和活动都是各自存在于一个独立的类当中的,它们之间并没有那么明显的方式来直接进行通信。如果想要在活动中调用碎片里的方法,或者在碎片中调用活动里的方法,应该如何实现呢? ...掌握了如何在活动中调用碎片里的方法,那在碎片中又该怎样调用活动里的方法呢?...停止状态 当一个活动进入停止状态时,与它相关联的碎片就会进入到停止状态,或者通过调用FragmentTransaction的remove() 、replace() 方法将碎片从活动中移除,但如果在事务提交之前调用...其中,活动中有的回调方法,碎片中几乎都有,不过碎片还提供了一些附加的回调方法,那我们就重点看一下这几个回调。 onAttach() 。当碎片和活动建立关联的时候调用。 onCreateView() 。
在该方法里面可以通过调用getUserVisibleHint()获得Fragment的状态是可见还是不可见的,如果可见则进行懒加载操作。...onCreate():初始化Fragment。可通过参数savedInstanceState获取之前保存的值。 onCreateView():初始化Fragment的布局。...onActivityCreated():执行该方法时,与Fragment绑定的Activity的onCreate方法已经执行完成并返回,在该方法内可以进行与Activity交互的UI操作,所以在该方法之前...Activity的onCreate方法并未执行完成,如果提前进行交互操作,会引发空指针异常。...Fragment生命周期执行流程(注意红色的不是生命周期方法): Fragment创建:setUserVisibleHint()->onAttach()->onCreate()->onCreateView
onCreate():Fragment被创建时调用 onActivityCreated():当Activity完成onCreate()时调用 onStart():当Fragment可见时调用。...的remove()、replace()方法将碎片从从活动中移除,但如果在事务提交之前调用addToBackStack()方法,这时的碎片也会进入到停止状态。...或者调用FragmentTransaction的remove()、replace()方法将碎片从活动中移除,但在事务提交之前并没有调用addToBackStack()方法,碎片也会进入到销毁状态。...交互 这种情况有三中方法解决: 方法一:直接在Activity中操作 直接在Activity中找到对应控件的实例,然后直接操控即可 方法二:直接在Fragment中操作 这里有两个问题:如何获取自己控件的引用...如何获取其他Fragment页控件的引用?
生命周期解析 先来看官方说明图 详解每个方法的调用场景 onAttach方法 Fragment和Activity建立关联的时候调用(获得activity的传递的值) onCreateView方法...为Fragment创建视图(加载布局)时调用(给当前的fragment绘制UI布局,可以使用线程更新UI) onActivityCreated方法 当Activity中的onCreate方法执行完后调用...(表示activity执行oncreate方法完成了的时候会调用此方法) onDestroyView方法 Fragment中的布局被移除时调用(表示fragment销毁相关联的UI布局) onDetach...onCreateView() onActivityCreated() 当这个fragment对用户可见的时候,它会经历以下状态。...onCreate() onCreateView() onActivityCreated() 其他场景的调用 屏幕灭掉 onPause() onSaveInstanceState() onStop
onCreate() 当fragment创建时被调用,你应该初始化一些实用的组件,比如在fragment暂停或停止时需要恢复的 onCreateView() 当系统调用fragment在首次绘制用户界面时...,如果画一个UI在你的fragment你必须返回一个View当然了你可以返回null代表这个fragment没有UI. onActivityCreated() 当activity的onCreate(...)方法返回时调用。...findFragmentById(); Activity控制Activity:这个显然是通过Intent活动之间的通信完成。...比如,如果fragment A是ListFragment的子类,每一次用户点击一个列表项目,系统调用fragment中的onListItemClick() 方法,在这个方法中可以调用onArticleSelected
第三步,调用addToBackStack(true)方法,目的为了允许用户通过按下返回按键返回到前一个Fragment状态,beginTransaction.commit()提交。...图片来源官方: 生命周期 onAttach(): 一旦片段与其活动相关联就被调用; onCreate(): 片段被调用创建; onCreateView(): 创建并返回相关的视图结构; onActivityCreated...(): 表示活动已被创建完成了,这里是activity创建成功; onStart(): 片段对用户可见; onResume(): 片段与用户开始交互; onPause(): 片段与用户不再交互;...onStop(): 片段不再对用户可见; onDestroyView(): 销毁与其View相关资源; onDestroy(): 销毁一切片段; onDetach(): 片段与其活动不再相关联...打开界面:onCreate() -> onCreateView()->onActivityCreated()->onStart()-> onResume() Home:onPause() -> onStop
在上一篇博文中对Fragment做了简单的介绍,现在再来探讨一下Fragment的生命周期。...一、Fragment的几种状态: 与Activity类似,Fragment也有一下几种状态: · 活动状态:当前Fragment位于前台,可见,可获得焦点。 ...· onCreateView(): 每次创建、绘制该Fragment的View组件时回调,Fragment将会显示该方法返回的View组件。 ...· onDestroyView():销毁Fragment的View组件时回调。 · onDestroy():销毁Fragment时调用,一次。 ...· onDetach():将Fragment从Activity中删除、被替换完成时回到该方法,在onDestroy()之后回调。 根据以上方法被回调的时机,我们可以根据需要选择性的覆盖指定方法。
的setUserVisibleHint(bool isVisibleToUser)中的isVisibleToUser为true的时候刷新数据的时候出现数据多次刷新的情况,因此对ViewPage + Fragment...5 true onDestroyView 3 猜测:通过以上日志,可以发现,不论fragment如何变化,首先被选中的fragment会调用参数为true的setUserVisibleHint方法,...被选中的fragment与相邻的fragment的状态肯定是onCreate的状态(如果未create就调用onCreateView,如果已经是onCreate的状态不调用),相邻的fragment会调用参数为...false的setUserVisibleHint方法,其他的fragment是处于onDestroy的状态。...5 onDestroyView 2 onDestroyView 1 总结: 可以看到,不管fragment如何变化,都是按照上面的规则进行变动的,知道了fragment的生命周期,那么就可以选择在合适的时期对我们的数据进行处理了
onCreate():Fragment被创建时调用。 onCreateView():创建Fragment的布局。...onActivityCreated():当Activity完成onCreate()时调用。 onStart():当Fragment可见时调用。...()->onCreate()->onCreateView()->onActivityCreated()->onStart()都是在Activity的onStart()中调用的。...如果要自定义对话框样式,只需要继承DialogFragment,并重写onCreateView(),该方法返回对话框UI。这里我们举个例子,实现进度条样式的圆角对话框。...onCreateView()之前,如果该界面为当前页,则调用setUserVisibleHint(true),否则调用setUserVisibleHint(false)。
R.id.left_fragment); 获取活动的方法: MainActivity activity = (MainActivity)getActivity(); 碎片的生命周期 onAttach...() 当碎片和活动建立关联的时候调用。...onCreateView() 为碎片创建视图(加载布局)时调用。 onActivityCreated() 确保与碎片相关联的活动一定已经创建完毕的时候调用。...onDestroyView() 当与碎片关联的视图被移除的时候调用。 onDetach() 当碎片和活动解除关联的时候调用。...(savedInstanceState); Log.d(TAG, "onCreate: "); } @Override public View onCreateView
详细解读每个方法的调用场景 onCreate():当创建启动时调用 onStart():当处于可见状态时调用 调用场景:Activity启动:onCreate()->onStart()->onResume...详细解读每个方法的调用场景 onAttach方法 Fragment和Activity建立关联的时候调用(获得activity的传递的值) onCreateView方法 为Fragment创建视图...执行oncreate方法完成了的时候会调用此方法) onDestroyView方法 Fragment中的布局被移除时调用(表示fragment销毁相关联的UI布局) onDetach方法 Fragment...和Activity解除关联的时候调用(脱离activity) fragment生命周期解析 当一个fragment被创建的时候: onAttach() onCreate() onCreateView...onCreate() onCreateView() onActivityCreated() 其他场景的调用 屏幕灭掉 onPause() onSaveInstanceState() onStop
对 Android 开发者来说,它提供了向后兼容性,大大简化了我们的开发。但是它是如何工作的呢?...如果返回 null,factory 的下一个默认方法 onCreateView(View, String, AttributeSet) 将被调用。...注意,FactoryActivity 的 setFactory2() 方法是在 super.onCreate 之前调用的。...onCreateView 我们希望 Factory2 的 onCreateView 方法直接调用 createView (代理给 AppCompatDelegate 那一小节中提到过) 。...根据组件名称创建对应的 AppCompat 组件(例如,如果是 TextView,就调用 createTextView 方法返回 AppCompatTextView)。
onCreate(Bundle savedStatus):创建Fragment时被回调。该方法只会被调用一次。...onCreateView():每次创建、绘制该Fragment的View组件时回调该方法,Fragment将会显示该方法返回的View 组件。...onDetach():将该 Fragment 从Activity中删除、替换完成时回调该方法,在onDestroy()方法后一定会回调 onDetach()方法。该方法只会被调用一次。...其中最常见的就是覆盖onCreateView()方法——该方法返回的View将由Fragment显示出来。...如果该系列分享对你有帮助,就动动手指关注、点赞、留言吧,你的互动就是对我最大的鼓励! 此文章版权为微信公众号分享达人秀(ShareExpert)——鑫鱻所有,若需转载请联系作者授权,特此声明!
定义一个Fragment时需要重写Fragment的几个生命周期中的回调方法包括: onCreateView() 系统调用此方法用来在第一次创建Fragment时,获得其layout。...上面几个方法基本就是Activity对应生命周期回调方法的一个调用传递,后面会在“Fragment生命周期”中详细介绍各个回调方法的用途,接下来就看看如何在Activity中使用Fragment。...()方法是Activity.onCreate()执行完毕后调用,可以在那里做一些Activity创建完成后的初始化操作。...显然,这些创建过程的回调方法仅执行一次。 如果是在Activity创建时添加Fragment,那么上述方法会严格受到宿主Activity的onCreate()执行的影响。...其它地方通过此接口实例来完成和Activity的交互。 如果没有特殊的抽象需要,Activity本身是完全可以直接调用Fragment的公开方法的。
当然你也可以将所有页面全部缓存,但这样所消耗的内存不言而喻,而且如果数据过多,第一次进去的时候的速度不可估量。所以这次我们使用懒加载来实现我们的需求。...Fragment 提供了 setUserVisibleHint 方法检测当前碎片是否处于可见状态,但是需要注意的是,这个方法不可以直接回调,因为它与Fragment的生命周期不是同步的。...class fragment extends Fragment { private boolean isvisible; //与碎片关联的活动创建完毕时调用 @Override...,即就是Viewapager.setAdapter之后就已经调用,但是当时还没有初始化完成,我们的子碎片还没有缓存好,所以我们在fragment基类里面定义了一个变量,只有当 onActivityCreated...碎片一定与相关的活动创建完毕的时候再更改变量的值为true,避免空指针的问题,所以第一次进来时没有执行到我们的方法。
onCreate() 方法与 Fragment 的 onCreateView() 方法稍微不同,在 Activity 的 onCreate() 方法中,我们可以调用 setContentView() 来为...2.获取FragmentManager,在活动中可以直接通过调用getSupportFragmentManager()方法得到。...3.开启一个事务,通过调用beginTransaction()方法开启。 4.向容器中添加或替换碎片,一般使用replace()方法实现,需要传入容器的id和待添加的碎片实例。...5.提交事务,调用commit()方法来完成。...又比如在Fragment中嵌套Fragment,这个功能是在api 17(android 4.2)才开始支持的,如果使用的是内置的Fragment,那么4.2之前的系统设备运行就会崩溃,说是不支持的方法
那么现在的问题是如何模拟出Activity销毁重建,来验证这个堆栈是否一致开发者选项正好提供了这样的操作:不保留活动图片开启后,在出现问题的AboutFragment页面进行前后台切换,来验证这个调用堆栈...中间梳理过程就省略了,完整的调用时序如下:1、当应用切到后台,且被系统销毁后,重新切回前台onCreate时序图片这个链路调用没有问题,但不同于正常点击菜单跳转。...,AboutFragment这里在onStart阶段就会创建这3个Fragment会把onCreate和onCreateView都执行完。...2个replace操作待处理2、当销毁的3个Fragment执行onCreate和onCreateView完毕后,此时FragmentManager还会调用execPendingActions,也正是因为调用了这个方法导致了...但onCreateView方法执行不了,因为在FragmentStateManager中图片这里在看抛出异常的链路就很清楚了:图片自此整个Crash的调用链路和发生场景都搞清楚了。
可以通过该方法获取Activity引用,还可以通过getArguments()获取参数。 onCreate():Fragment被创建时调用。...onCreateView():创建Fragment的布局。 onActivityCreated():当Activity完成onCreate()时调用。...hide(): 不调用任何生命周期方法,调用该方法的前提是要显示的Fragment已经被添加到容器,只是纯粹把Fragment UI的setVisibility为false。...onAttach->onCreate->onCreateView->onStart->onResume。...也就是说切换fragment的时候有可能会多次onCreateView,所以需要注意处理数据。 由于可能多次onCreateView,所以我们可以把view保存起来,如果为空再去初始化数据。
当A启动B时,A调用onPause()方法,然后调用新的Activity B,此时调用onCreate()方法 —> onStart()方法 —> onResume()方法将新Activity激活。...如果一个Service被多次执行startService(),它的onCreate()方法只会调用一次,也就是说该Service只会创建一个实例,而它的onStartCommand()将会被调用多次(对应调用...如果一个Service被调用 Context.bindService ()方法绑定启动,不管调用bindService()调用几次,onCreate()方法都只会调用一次,而onStartCommand...如果调用bindService()方法前服务已经被绑定,多次调用bindService()方法并不会导致 多次创建服务及绑定(也就是说onCreate()和onBind()方法并不会被多次调用)。...如果调用者希望与正在绑定的服务解除绑定,可以调用 unbindService()方法,调用该方法也会导致系统调用服务的onUnbind()–>onDestroy()方法。
领取专属 10元无门槛券
手把手带您无忧上云