关闭

Fragment:判断是否显示当前Fragment

1930人阅读 评论(0) 收藏 举报
分类:

      Fragment虽然有onResume和onPause的,但是这两个方法是Activity的方法,调用时机也是与Activity相同,和ViewPager搭配使用这个方法就很鸡肋了,根本不是你想要的效果,这里介绍一种方法。



//在Fragment显示出来调用的方法

   public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (isVisibleToUser) {
            //相当于Fragment的onResume
        } else {
            //相当于Fragment的onPause
        }
    }
  • 大家开发Android的APP的时候,应该都是用过Fragment。 
    Fragment使用起来非常方便,灵活。在ViewPage中PageAdapter来管理所有的Fragment即可。 
    但是大家都会遇到一个问题,就是在加载一个Fragment的时候,会自动缓存左右几个(默认是一个)页面,此时也会调用到正常的生命周期函数,onCreate,onCrateView,onResume.可是这样给用户的体验很不好。因为用户还没有看到要预加载的界面,却已经开始加载,用户或许可能就不会看到那个界面,但是紧邻的那个界面却已经开始加载了。

    例如:一个ViewPager中存在三个Fragment页面的时候,当默认是第一个页面可见,并加载数据进而显示界面。那么在后台就会收集到紧邻的那个Fragment的信息数据了。

    如何处理呢?其实很简单,Fragment下专门有一个setUserVisibleHint函数来处理这个事情:

    01.<code class=" hljs java">//实现该方法即可实现可见再加载。不可见不加载的效果!!!   
    02.@Override
    03.public void setUserVisibleHint(boolean isVisibleToUser) {
    04.super.setUserVisibleHint(isVisibleToUser);
    05.if (isVisibleToUser) {
    06.//可见时执行的操作
    07.else {
    08.//不可见时执行的操作
    09.}
    10.}</code>

    用法非常简单,直接在Fragment类中重写上述方法即可。 
    当isVisibleToUser=true的时候,执行相应的操作,例如:开辟线程和后台服务器进行交互获取数据,进行界面数据加载显示等,或者进行数据统计,统计当前Fragment打开过几次等等。 
    当isVisibleToUser= false的时候,说明当前Fragment不可见,大家可以根据需求执行响应的操作。

    大家应该用过网易新闻客户端,没有使用的可以下载下来看看客户端的界面,它里面就是通过该方法进行判断的,滑动界面切换Fragment,不可见的Fragment数据不加载,切换到可见的时候,在进行加载数据进行显示。另外值得一提的是,网易新闻客户端使用到了缓存,其实缓存很简单的。

    简单原理:当前Fragment可见的时候,即isVisibleToUser=true的时候,开启线程从服务器获取数据,获取到之后保存数据在本地缓存文件中,然后加载数据进行界面显示。当Fragment不可见的时候,数据不进行清理,以便于用户切换回该Fragment之后从缓存文件中直接加载数据即可。只有当用户下拉刷新的时候重新从服务器获取数据然后覆盖以前保存的缓存文件,然后加载数据进而显示界面。 
    不难,我也不单独給实例什么的了。大家如果用到的时候不怎么会用的话,欢迎和我交流交流,说不上一定帮上忙,但是我一定尽力,共同进步!!^_^【握手】

    在重复一句,上面的方法超级简单、实用!!!



1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:15526次
    • 积分:511
    • 等级:
    • 排名:千里之外
    • 原创:36篇
    • 转载:8篇
    • 译文:0篇
    • 评论:1条
    文章分类
    最新评论