Android 判断Fragment是否可见
目录
一、Fragment 对用户可见的必要条件
二.代码:
2.1 代码介绍
2.2 各种状态的log
2.2.1 进入Activity
2.2.2 滑动到tab2视频
2.2.3 回到桌面
2.2.3 从桌面返回程序
2.2.4 从tab2视频滑到到tab1图片
2.2.5 从tab1图片进入其他activity
2.2.6 从其他activity返回tab1图片
2.2.7 从tab1图片,点击tab4文件进入tab4
一、Fragment 对用户可见的必要条件
1. fragment 是否对用户可见,依赖于下面三个方法:
getUserVisibleHint
onResume
onStop
用户可见:getUserVisibleHint()返回true 并且 onResume刚刚调用了
2、举例说明
1. 一个Activity,四个fragment,依次是图片、视频、音频、文件

二.代码:
2.1 代码介绍
代码分三步
1. 本地变量,用于记录状态
2. 自定义方法,用于判断fragment真实展现,不要用其提供的isVisible()方法
3. demo 打印日志,用于讲解
// 1. 本地变量,用于记录状态private String mName;private boolean mResume = false;// 标记onResume是否被刚刚调用// 2. 自定义方法,用于判断fragment真实展现,不要用其提供的isVisible()方法public boolean isRealVisible(){return getUserVisibleHint() && mResume;}// 3. demo 打印日志,用于讲解@Overridepublic void setUserVisibleHint(boolean isVisibleToUser) {super.setUserVisibleHint(isVisibleToUser);Log.e("TestFragment", "setUserVisibleHint mName="+ mName +" isVisibleToUser:"+isVisibleToUser+"\tisVisible:"+isVisible()+"\tisRealVisible:"+isRealVisible());}@Overridepublic void onResume() {super.onResume();mResume=true;Log.e("TestFragment", "onResume mName="+mName+"\tisVisible:"+isVisible()+"\tisRealVisible:"+isRealVisible());}@Overridepublic void onStop() {super.onStop();mResume=false;Log.e("TestFragment", "onStop mName="+mName+"\tisVisible:"+isVisible()+"\tisRealVisible:"+isRealVisible());}
2.2 各种状态的log
2.2.1 进入Activity
Activity显示加载前两个fragment:图片、视频
之后图片调用setUserVisibleHint(true),
最后分别调用图片、视频的onResume
注意:此时系统的 isVisible 返回了true

2.2.2 滑动到tab2视频
1. Activity先加载tab3音频,并调用setVisibleToUser, 设置音频为false、图片为false、视频为true
2.调用音频的onResume

2.2.3 回到桌面
调用已加载fragment的onStop方法

2.2.3 从桌面返回程序
调用已加载fragment的onResume方法

2.2.4 从tab2视频滑到到tab1图片
仅仅调用了视频、图片的setVisibleToUser方法,视频为false,图片为true

2.2.5 从tab1图片进入其他activity
调用已加载fragment的onStop方法

2.2.6 从其他activity返回tab1图片
调用已加载fragment的onResume方法

2.2.7 从tab1图片,点击tab4文件进入tab4
1. Activity先加载tab3音频,并调用setVisibleToUser, 设置文件为false,音频为false、图片为false、文件为true
2.调用视频的onResume

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
