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
至此很简单主要就是这几行代码就关闭了预加载。
- ViewPager+Fragment连用取消预加载(ViewPagerIndicator+Fragment)
- ViewPager+Fragment取消预加载
- viewpager+fragment 重写viewpager取消预加载
- fragment 懒加载 viewpager 取消预加载
- ViewPager+Fragment取消预加载(延迟加载)
- Fragment+Viewpager 取消懒加载/预加载
- ViewPager+Fragment取消预加载(延迟加载)
- ViewPager+Fragment取消预加载(延迟加载)
- ViewPager+Fragment取消预加载(延迟加载)
- ViewPager+Fragment取消预加载(延迟加载)
- ViewPager+Fragment取消预加载(延迟加载)
- ViewPager+Fragment取消预加载(延迟加载)
- ViewPager+Fragment取消预加载(延迟加载)
- ViewPager+Fragment取消预加载(延迟加载)
- ViewPager+Fragment setUserVisibleHint取消预加载(延迟加载)
- ViewPager+Fragment取消预加载(延迟加载)
- ViewPager+Fragment取消预加载(延迟加载)
- ViewPager+Fragment取消预加载(延迟加载)
- CSS网页实例:适合所有项目通用的reset.css
- 《树状数组》hdu acm 5.3.2 一维
- 组合c(m,n)的计算方法
- 【图项目3—图的遍历——第12周】
- ViewGroup事件分发机制
- ViewPager+Fragment连用取消预加载(ViewPagerIndicator+Fragment)
- Qt:让任意线程执行一个匿名函数
- poj2553The Bottom of a Graph【scc+缩点】
- 关于thinkphp中自带的分页类中setConfig("last","尾页")无效的解决方法
- myeclipse中自动提示的设置
- Ubuntu 14.04 caffe 配置
- “Could not launch 'app name'”
- C#操作字符串方法总结<转>
- uva 839