Android 判断Fragment是否可见

目录

 

一、Fragment 对用户可见的必要条件

二、举例说明

2.代码:

2.1 代码介绍

2.2 各种状态的log

2.2.2 滑动到tab2视频

2.2.3 回到桌面

2.2.3 从桌面返回程序

2.2.4 从tab2视频滑到到tab1图片

2.2.5 从tab1图片进入其他activity


一、Fragment 对用户可见的必要条件

fragment 是否对用户可见,依赖于下面三个方法:

getUserVisibleHint

onResume

onStop

用户可见:getUserVisibleHint()返回true 并且 onResume刚刚调用了

二、举例说明

1. 一个Activity,四个fragment,依次是图片、视频、音频、文件

  

2.代码:

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 打印日志,用于讲解
    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        Log.e("TestFragment", "setUserVisibleHint mName="+ mName +" isVisibleToUser:"+isVisibleToUser+"\tisVisible:"+isVisible()+"\tisRealVisible:"+isRealVisible());
    }

    @Override
    public void onResume() {
        super.onResume();
        mResume=true;
        Log.e("TestFragment", "onResume  mName="+mName+"\tisVisible:"+isVisible()+"\tisRealVisible:"+isRealVisible());
    }

    @Override
    public void onStop() {
        super.onStop();
        mResume=false;
        Log.e("TestFragment", "onStop  mName="+mName+"\tisVisible:"+isVisible()+"\tisRealVisible:"+isRealVisible());
    }

2.2 各种状态的log

2.2.1 进入Activity

  1. Activity显示加载前两个fragment:图片、视频

  2. 之后图片调用setUserVisibleHint(true),

  3. 最后分别调用图片、视频的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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章