Android Fragment(一)之onResume不执行
2016-09-12 20:44
417 查看
相信从事Android开发的时候都会遇到一种需求,就是重到某个页面的时候需要刷新下数据或者其他的业务逻辑,这个时候我们都会想到onResume,但有时候当我们在Fragment中的onResume上调用某个方法并重回到该Fragment之后,却发现onResume没有被调用,正是自己在开发上也遇到同样的问题,所以在此作出一些总结,方便日后查询
这种场景很常见,因为现在国内很多app采用的交互都是底部有4到5个tab,然后点击不同的tab可以切换到不同的页面,而UI上的实现方法有多种,但最后几乎都是在MainActivity中嵌套Fragment,而且我惯用的切换方式就是先把当前的Fragment隐藏,再show出要展示的Fragment,那么这种情况下,如果只是在一级界面不断点击下面几个tab以切换各个界面的时候,由于fragment的宿主MainActivity一直都是可见状态,所以这种情况下Fragment的onResume并不会重复执行,那么这个时候我们可以在onHiddenChanged()这个方法中处理自己的逻辑
a---刚进入宿主activity : f1-onAttach > onCreate > f2-onAttach > onCreate > onCreateView
> onActivityCreated > f1-onCreateView > onActivityCreated > onStart > onResume > f2-onStart > onResume
b---f1切换到f2 : f3-onAttach > onCreate > onCreateView
> onActivityCreated > onStart > onResume
c---f2切换到f1 : f3-onPause > onStop > onDestroy
d---f1切换到f2 : f3-onCreatrView > onActivityCreated > onStart > onResume
e---f2切换到f3 : f4-onAttach > onCreate > f1-onPause
> onStop > onDestroy > f4-onActivityCreated > onStart > onResume
可以很清楚看到除了滑到最左或最右viewpager只加载2页之外,其他时候都是加载3页,假设现在所看到的页面是f2,那么你滑到f1或者f3,这两个都不会执行onResume,所以不能在onResume中做处理,这个时候就要用setUserVisibleHint(boolean isVisibleToUser)方法,这个方法在onCreateView之前执行,当Fragment可见的时候isVisibleToUser值为true
注意:setUserVisibleHint()方法在第一种情况中并不会自动调用
由于本人经验尚浅,如有错漏还请各位同学指出,谢谢,,
1、Activity嵌套多个Fragment作为一级界面,并在此切换过程中
这种场景很常见,因为现在国内很多app采用的交互都是底部有4到5个tab,然后点击不同的tab可以切换到不同的页面,而UI上的实现方法有多种,但最后几乎都是在MainActivity中嵌套Fragment,而且我惯用的切换方式就是先把当前的Fragment隐藏,再show出要展示的Fragment,那么这种情况下,如果只是在一级界面不断点击下面几个tab以切换各个界面的时候,由于fragment的宿主MainActivity一直都是可见状态,所以这种情况下Fragment的onResume并不会重复执行,那么这个时候我们可以在onHiddenChanged()这个方法中处理自己的逻辑2、一级界面为Fragment,跳到二级界面再返回
这个场景就不需要多说,直接在onResume中实现就好3、ViewPager + Fragment
假设现在我们有4个Fragment,分别为f1、2、3、4a---刚进入宿主activity : f1-onAttach > onCreate > f2-onAttach > onCreate > onCreateView
> onActivityCreated > f1-onCreateView > onActivityCreated > onStart > onResume > f2-onStart > onResume
b---f1切换到f2 : f3-onAttach > onCreate > onCreateView
> onActivityCreated > onStart > onResume
c---f2切换到f1 : f3-onPause > onStop > onDestroy
d---f1切换到f2 : f3-onCreatrView > onActivityCreated > onStart > onResume
e---f2切换到f3 : f4-onAttach > onCreate > f1-onPause
> onStop > onDestroy > f4-onActivityCreated > onStart > onResume
可以很清楚看到除了滑到最左或最右viewpager只加载2页之外,其他时候都是加载3页,假设现在所看到的页面是f2,那么你滑到f1或者f3,这两个都不会执行onResume,所以不能在onResume中做处理,这个时候就要用setUserVisibleHint(boolean isVisibleToUser)方法,这个方法在onCreateView之前执行,当Fragment可见的时候isVisibleToUser值为true
注意:setUserVisibleHint()方法在第一种情况中并不会自动调用
由于本人经验尚浅,如有错漏还请各位同学指出,谢谢,,
相关文章推荐
- 扫盲:A B 两个界面跳转 关闭B时执行A的onResume后执行B的onDestroy
- Fragment onResume不执行
- fragment 状态保存时怎么执行一些需要在onResume、onPause方法里面运行的东西
- LocalActivityManager说明 及 Activity的onResume不被执行问题
- TabHost中执行子Activity的OnResume方法
- Fragment 的onResume() 不执行时
- android fragment onstart onresume onpause 执行时机笔记
- Fragment的OnResume()方法不执行原因及解决办法
- onResume什么时候执行,执行几次的问题
- LocalActivityManager类:为什么Activity的onResume不被执行
- Android Fragment(一)之onResume不执行
- OnCheckedChangeListener执行了二次
- 【Android 非人为操作的UI更新】在onCreate()和onResume()等方法中的更新UI操作方法及获取View的相关消息
- mysql用root登录,执行revoke all privileges on *.* from root@'localhost'语句后无法执行DML语句解决办法
- Activity的onNewIntent方法执行时间
- Fragment的可见再加载的方法(真正的Fragment的OnResume和OnPause)
- RadioGroup调用setcheck(bool)方法时,onCheckedChanged方法被执行多次解决办法
- Android硬件加速以及【WebView】的onPause,onResume,OnDestroy
- 【Android实战】----调用startActivityForResult()后,onActivityResult()立即执行的问题
- ASP.NET页面执行顺序(第二个LoadViewState事件可以解释我新浪博客中的“HiddenField隐藏域的值改变时onvaluechanged的事件触发问题”一文的问题)