Fragment:判断是否显示当前Fragment

原创 2016年08月31日 10:34:23

      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之后从缓存文件中直接加载数据即可。只有当用户下拉刷新的时候重新从服务器获取数据然后覆盖以前保存的缓存文件,然后加载数据进而显示界面。 
    不难,我也不单独給实例什么的了。大家如果用到的时候不怎么会用的话,欢迎和我交流交流,说不上一定帮上忙,但是我一定尽力,共同进步!!^_^【握手】

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



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

获取当前显示的fragment对象

卤煮第一次发帖,经验也不是很足,个人文采不好,还是直接贴代码把 首先需要 一个继承fragmen( android.support.v4.app.Fragment)的基类. public ...

Android Fragment 你应该知道的一切

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/42628537,本文出自:【张鸿洋的博客】很久以前写过两篇Fragment的介绍,...

怎么判断当前activity上显示的是哪个fragment?

public Fragment getVisibleFragment(){     FragmentManager fragmentManager = MainActivity.this.getSu...
  • bfboys
  • bfboys
  • 2016-10-31 18:27
  • 3834

如何判断当前的Fragment是否可见?Fragment的可见与不可见的判断方法。

网上好多都说用下面这个方式,但是这种方式只限于再viewpager时使用。 @Override public void setUserVisibleHint(boolean isVisibleTo...

ViewPager中fragment是否可见---android实用技巧

ViewPager在进行管理Fragment时 除了当前页面 会缓存左右几个页面(默认是一个),当你进行切换相邻的页面的时候,原先的页面不会销毁,Fragment生命周期还是在onResume中,所以...

判断Fragment是否展示

在android 开发中使用Fragment基本上是一个搞android的都知道的,他不知道方便了开发者模块化应用,而且方便开发者管理他的生命周期。但是我们很多人都是把Fragment 放到ViewP...

android-判断当前Fragment是否可见(Visible)

判断当前Fragment是否可见 public abstract class BaseFragment extends Fragment {           /** Fragment当前...

如何判断Fragment是否对用户可见

原文:http://www.cnblogs.com/dongweiq/p/5411899.html 背景 最近在开发中遇到了一个问题。我们的app需要统计用户的页面路径,也就是...

一行代码获取ViewPager中当前显示的Fragment

一句代码获取ViewPager中当前显示的Fragment 我不知道网上的那些答案为什么写的那么复杂, 明明一行代码可以搞定的事情, 写的这么麻烦, 有两种方式可以获取

判断当前Fragment是否切换到前台

我们都知道,Activity有onResume()方法,可以很方便程序员在该Activity(重新)展示在用户面前的时候,执行一些数据更新的操作,例如需要重新加载网络数据。那么Fragment呢,查看...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)