Android - ViewPager+Fragment初始化问题
Android应用开发中,经常会用到ViewPager + Fragment,虽然效果不错,但随之而来的还有一些问题,下面就说说其中的初始化问题。
ViewPager初始化时会预加载前后的2个页面,即使设置了setOffscreenPageLimit(0); 它至少也会预加载一个页面
但在实际场景中,可能我们不需要这个预加载的功能,这时我们就需要对其进行一些控制。
我使用的方法是setUserVisibleHint(boolean isVisibleToUser)
每次ViewPager预加载页面的时候,被预加载的Fragment都会调用这个方法,所以我就通过这个方法来控制Fragment里面的数据初始化
使用前提是Fragment页面的数量不是很多,设置setOffscreenPageLimit(所有Fragment的数量);
原因是如果不全部预加载,那么当滑动页面超出预加载范围之后,就会有页面被销毁,那么这个控制方法就失效了,当然,如果没有特殊的需求
不设置这个方法也不会有问题,主要看自己的需求。
具体方法如下:
public boolean canExcute = true;//为了onActivityCreated中setUserVisibleHint方法只执行一次
public boolean isFirstExcute = true;//标记页面是否是第一次加载,为了初始化只执行一次
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (canExcute) {//页面第一次加载时执行,以后不在执行
canExcute = false;
setUserVisibleHint(getUserVisibleHint());
}
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (canExcute) {//onActivityCreated方法执行之前,不让此方法执行
return;
}
if (isVisibleToUser && isFirstExcute) {// 页面可见并且是第一次加载
isFirstExcute= false;//标记页面已经加载过一次,以后不需要在执行
initData();//把你只需要初始化一次的数据写在这个方法里面
}
if (getUserVisibleHint()) {// 页面每次对用户可见时执行
} else {
}
}
以上方法不一定对所有场景都适用,大家使用时还是需要经过测试并改进。
Android - ViewPager+Fragment初始化问题的更多相关文章
- Android ViewPager Fragment使用懒加载提升性能
Android ViewPager Fragment使用懒加载提升性能 Fragment在如今的Android开发中越来越普遍,但是当ViewPager结合Fragment时候,由于Androi ...
- android ViewPager+Fragment之懒加载
说说写这篇博客的背景吧,前两天去面试,问到一个问题说的是:比如我们首页,是有3个fragment构成的,并且要是实现作用可以滑,那么这个最好的选择就是ViewPager+fragment了,但是我们知 ...
- Android ViewPager + Fragment的布局
ViewPager And Fragment 1.之前有篇博客是讲ViewPager的用法的:http://www.cnblogs.com/liangstudyhome/p/3773156.html ...
- Android ViewPager+Fragment 在Activity中获取Fragment的控件
如果ViewPager+Fragment实现Tab切换,在activity中利用adapter.getItem获取到fragment然后再根据fragment.的方法获取控件 //隐藏求租,以下代码用 ...
- Android Viewpager+Fragment实现滑动标签页
ViewPager 结合Fragment实现一个Activity里包含多个可滑动的标签页,每个标签页可以有独立的布局及响应. 主页布局 <?xml version="1.0" ...
- Android viewPager+fragment实现滑页效果
先上图,手指在手机向左或者向右滑就可以实现相应的页面切换. 先看activity_main.xml文件,非常简单,主要是三个标题TextView和viewpager <?xml version= ...
- Android ViewPager + Fragment实现滑动页面
效果: PagerData类: package com.cloud.viewpagerdemo; import java.io.Serializable; class PagerData implem ...
- Android viewpager + fragment取消预加载
1,在fragment中重写setUserVisibleHint方法private boolean isVisibleToUser;@Overridepublic void setUserVisibl ...
- android viewpager fragment 优化 切换界面 延时加载
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 使用 碎片的 设置用户可见暗示visible hint 这个方法来做到. hint 是 ...
随机推荐
- 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数004·edge,边缘处理
<zw版·Halcon-delphi系列原创教程> Halcon分类函数004·edge,边缘处理 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替换:“ ...
- FastJSON 之bean列表转换为JSON
实例 import java.util.ArrayList; import java.util.List; import com.alibaba.fastjson.JSON; public class ...
- 方法过滤器,分布式缓存 Memcached实现Session解决方案
控制器-〉方法过滤器-〉controller-> 方法 所以通过建立controller基类的方法进行方法过滤,所有控制器先执行基类的OnActionExecuting 方法. using Sp ...
- android通知栏总结
通知消息的发送 12-1:消息管理者 NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION ...
- 【转】mysql安装图解
转载地址:http://www.jb51.net/article/23876.htm 很多朋友刚开始接触mysql数据库服务器,下面是网友整理的一篇mysql的安装教程,步骤明细也有详细的说明. ...
- EntityFramework Core 学习笔记 —— 包含与排除类型
原文地址:https://docs.efproject.net/en/latest/modeling/included-types.html 在模型类中包含一种类型意味着 EF 拥有了这种类型的元数据 ...
- Python3基础 reverse 将列表倒序排列
镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...
- Python virtualenv安装库报错SSL: CERTIFICATE_VERIFY_FAILED
Python virtualenv安装库报错SSL: CERTIFICATE_VERIFY_FAILED 问题描述 使用pip按照virtualenv报错,如下: pip install virtua ...
- Python 基础练习
今天接触了python,了解了一下 python 的基础语法,于是想着手训练一下,在本习题集中,参考代码为提供的参考答案,前面的代码为自己思考的代码,最后每道题给出练习的时间. Python 基础练习 ...
- 解决T400\T500\W500等安装win10驱动后黑屏问题
T400.W500.T500等机型有双显卡的机型,在安装WIn10后会在驱动后黑屏,但可见启动画面: 原因:没有对应的双显卡驱动程序,导致系统无法正确识别显卡: 解决方法:开机按F1进入Bios,在显 ...