ViewPager+Fragment连用取消预加载(ViewPagerIndicator+Fragment)

来源:互联网 发布:淘宝买家秀 珍珠内裤 编辑:程序博客网 时间:2024/06/06 16:34

ViewPageIndicator的核心就是ViewPager,所以同样存在预加载的问题。

项目中经常会用到这样的tab切换,所以核心都会用到ViewPager+Fragment,那么会有个问题,在ViewPager中添加三个或多个Fragment,那么当ViewPager中第一个Fragment加载的时候,会加载第二个,甚至连第三个都会帮助加载好;这个功能很好但,很多时候当只需要第一个Fragment的时候会做很多多余的工作,增添网络请求压力。所以我们想要的一个效果切到那个Fragment再请求那些数据。

首先介绍两个Fragment的两个方法,也是很重要的方法void setUserVisibleHint(boolean isVisibleToUser)、boolean getUserVisibleHint()

setUserVisibleHint:该方法是在onCreate方法和onCreateView方法之间执行的一个方法,同时该方法是在Fragment显示的时候执行的,所以说通过这个方法可以做很多事。

getUserVisibleHint:获得Fragment的可见状态。

    import android.support.v4.app.Fragment;            public abstract class BaseFragment extends Fragment {                    /** Fragment当前状态是否可见 */          protected boolean isVisible;                              @Override          public void setUserVisibleHint(boolean isVisibleToUser) {              super.setUserVisibleHint(isVisibleToUser);                            if(getUserVisibleHint()) {                  isVisible = true;                  onVisible();              } else {                  isVisible = false;                  onInvisible();              }          }                              /**          * 可见          */          protected void onVisible() {              lazyLoad();               }                              /**          * 不可见          */          protected void onInvisible() {                                      }                              /**           * 延迟加载          * 子类必须重写此方法          */          protected abstract void lazyLoad();      }  

之后写Fragment就可以继承这个类来些,然而必须重写lazyLoad()方法,当Fragment对用户可见(也就是切换到该Fragment时)在lazyLoad()中加载所需数据;

下面摘一段代码,可以看一下怎么用

public class ActivityPageFragment extends BaseFragment{//首先执行该方法    @Override    protected void lazyLoad() {        if (!isVisible ) {            return;        }//在这里对所需数据进行加载        new LoadActivityListAsyncTask().execute(Const.REFRESH_INDEX);        new PrizeListAsyncTask().execute();    }    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle            savedInstanceState) {        return inflater.inflate(R.layout.fragment_activity_page, container, false);    }
类似这样写Fragment,在Fragment都写好后,还要在FragmentActivity中对ViewPager设置一下,让其每次只加载一个Fragment;

ViewPager.setOffscreenPageLimit(int limit),其中参数可以设为0或者1,参数小于1时,会默认用1来作为参数,未设置之前,ViewPager会默认加载两个Fragment。所以,我们只需要调用下它,设置下加载Fragment个数即可。

mViewPager = (ViewPager) findViewById(R.id.fl_tabcontent);mViewPager.setOffscreenPageLimit(1);//关闭预加载,默认一次只加载一个Fragment

至此很简单主要就是这几行代码就关闭了预加载。

0 0
原创粉丝点击