很多时候 一个fragment可能放在不同地方,但是子类是做了某些刷新的封装,到第哪些需要懒加载哪些 不需要,或者需要但是 所嵌套的层次不同,都会出现不一样的毛病
比如子fragment,放在viewpager里面放在viewpager里面的 子fragment等等。如果出现问题了设置setOnStartNeedCheckData为true即可。

package cn.qssq666.rapiddevelopframe.base.fragment;import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.BuildConfig;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;import cn.qssq666.rapiddevelopframe.global.SuperAppContext;
import cn.qssq666.rapiddevelopframe.utils.FragmentUtil;
import cn.qssq666.rapiddevelopframe.utils.Prt;/*** Created by 情随事迁(qssq666@foxmail.com) on 2017/2/22.*/public abstract class BaseLazyLoadFragment extends SuperFragment implements FragmentUtil.FragmentOnStartNeedCheckVisible<BaseLazyLoadFragment> {public final String TAG = this.getClass().getName();protected boolean mIsViewCreated;public View getView() {return mView;}private View mView;@Nullable@Overridepublic final View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {if (mView == null || mIsViewCreated == false) {//mInitfalse则重新加载mView = onCreateViewFix(inflater, container, savedInstanceState);}return mView;}abstract protected View onCreateViewFix(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState);@Overridepublic final void onViewCreated(View view, @Nullable Bundle savedInstanceState) {if (!mIsViewCreated) {mIsViewCreated = true;if (!isLazyLoadMode()) {if(cn.qssq666.rapiddevelopframe.BuildConfig.DEBUG){Log.w(TAG,"LAZY-FRAGMENT-INIT-onViewCreatedFix-ABSTRACT");}onViewCreatedFix(view, savedInstanceState);} else {lazyLoad();//但是如果不可见也是没法调用的.}}}public abstract void onViewCreatedFix(View view, @Nullable Bundle savedInstanceState);@Overridepublic void onDestroyView() {super.onDestroyView();if (mView != null) {ViewGroup viewGroup = ((ViewGroup) mView.getParent());if (viewGroup != null) {viewGroup.removeView(mView);}}}/*** Fragment当前状态是否可见*/protected boolean isVisible = false;protected boolean mIsLoadData;@Overridepublic void setUserVisibleHint(boolean isVisibleToUser) {super.setUserVisibleHint(isVisibleToUser);if (getUserVisibleHint()) {isVisible = true;onVisible();} else {isVisible = false;onInvisible();}}/*** 可见*/protected void onVisible() {lazyLoad();}/*** 不可见*/protected void onInvisible() {}@Overridepublic void onStart() {super.onStart();isVisible = true;if (onStartNeedCheckData()) {if (!hasInitData() && isLazyLoadMode()) {//在viewpager里面没问题,但是单纯的fragment如 畅销故事需要写这个.可能是因为adapter适配器的不同导致的.lazyLoad();}}}public boolean onStartNeedCheckData() {return mOnStartNeedCheckData;}/*** 如果是fragment里面的fragment则需要。** @param mOnStartNeedCheckData* @return*/public BaseLazyLoadFragment setOnStartNeedCheckData(boolean mOnStartNeedCheckData) {this.mOnStartNeedCheckData = mOnStartNeedCheckData;return this;}boolean mOnStartNeedCheckData;@Overridepublic void onStop() {super.onStop();isVisible = false;}public String getTAG() {return "BaseLazy";}protected boolean hasInitData() {return mIsLoadData;}/*** 延迟加载* 子类必须重写此方法*/protected void lazyLoad() {if (isLazyLoadMode()) {if (!mIsViewCreated || !isVisible) {Log.w(TAG, "lazyLoad call return :init?" + mIsViewCreated + ",是否可见:" + isVisible);return;}if (getActivity() == null) {Prt.e(TAG, "activity为空" + this.getClass().getSimpleName());if (BuildConfig.DEBUG) {SuperAppContext.showToast("" + "activity为空" + this.getClass().getSimpleName());}return;}if (mIsLoadData) {if(BuildConfig.DEBUG){Log.w(TAG, "页面已经加载了并显示过了,忽略init " + this.getClass());}return;}mIsLoadData = true;onViewCreatedFix(mView, null);}}@Overridepublic void onAttach(Context context) {super.onAttach(context);if (BuildConfig.DEBUG) {Prt.w(TAG, "onAttach");}}protected boolean isLazyLoadMode() {return lazyLoadMode;}public BaseLazyLoadFragment setLazyLoadMode(boolean lazyLoadMode) {this.lazyLoadMode = lazyLoadMode;return this;}boolean lazyLoadMode = true;}

http://www.taodudu.cc/news/show-7225303.html

相关文章:

  • gradle的几个实用技巧让你爽歪歪
  • ffmpeg学习心得之一键处理视频图片合成加图片水印文字水印裁剪
  • 使用mvc架构模式实现账户之间的转账(没有涉及事务处理)
  • Spring D5
  • 宁波市中医院-自己视力检查-2019年2月2日
  • 求助-影像组学 for循环连续提取影像受阻
  • 关于激光雷达盲区0.4m问题
  • Opencv项目实战:基于dlib的疲劳检测
  • 激光雷达动态障碍物滤除-调研与展望
  • GRL(CVPR2023图像修复)训练自己的数据集
  • 电脑连上wifi但不能上网的解决办法
  • WiFi 無法上網(Wi-Fi列表不見了)
  • 连上wifi但无法上网
  • 家里WIFI连接上了但是无法上网的问题解决方案
  • 解决电脑WiFi已连接,可是无法上网办法
  • 新能源乘用车渗透率超30%!新能源汽车产业技术论坛11月3日开幕
  • 报告解读下载 | 2022年4月中国数据库行业分析报告
  • 报告 | 《2022年数据隐私统计、事实与趋势》,涵盖26项数据隐私统计数据
  • 行业数据和报告到底应该如何去找?
  • 5月《中国数据库行业分析报告》正式发布,首发时序、实时数据库两大【全球产业图谱】
  • 学习总结——player(播放器)相关知识
  • 企业微信,实现群机器人监控线上服务报警
  • 《数字摄影与摄像》——风光摄影
  • “湘西明珠”-凤凰古城
  • 回顾光影先锋发展史(2)-佳能
  • 《人在影途》----2010摄影之家年会贺岁片
  • Ameya360:安森美成像技术开启数字电影摄影新纪元
  • 美摄云剪辑3.0:融合AIGC,实现效率提升
  • 安森美成像技术开启数字电影摄影新纪元
  • 深入理解分布式技术 - 分布式系统中的缓存

分享一个没有bug的我修改改良过的Fragment懒加载代码相关推荐

  1. 懒加载(延迟加载)之后,在使用数据过程中容易出现的bug

    在UI中,使用懒加载,也就是延迟加载来加载数据的时候,总是会面临几个问题? 如:1. >为什么先创建NSArray属性? 2. >为什么重写NSArray的get方法? 3.>为什么 ...

  2. load方法引入本地html报错,分享基于plus.downloader的图片懒加载功能,支持本地缓存v1.1.0...

    今天试用了下hello mui上的图片懒加载功能,发现有些地方还无法满足我的需求,ajax动态加载的时候无法实现懒加载. 然后又看了下36kr的示例,因为代码关系实在太多了,耦合度比较高,遂自己动手写 ...

  3. bootstraptable treeGrid 懒加载_为 Vue 的惰性加载加一个进度条

    简介 通常用 编写单页应用(SPA)时,当加载页面时,所有必需的资源(如 JavaScript 和 CSS 文件)都会被一起加载.在处理大文件时,这可能会导致用户体验不佳. 借助 Webpack,可以 ...

  4. 一个简单的图片懒加载

    一个简单的图片懒加载 所谓懒加载,是为了提高网页的打开的速度,获得更好用户体验的一种手段.其选择的重要的部分先加载,次要的部分需要的时候再加载.比如一个电商网站,首屏通常有很多的数据,清晰度较高的 b ...

  5. 分享大麦UWP版本开发历程-03.GridView或ListView 滚动底部自动加载后续数据

    今天跟大家分享的是大麦UWP客户端,在分类.订单或是搜索时都用到的一个小技巧,技术粗糙大神勿喷. 以大麦分类举例,默认打开的时候,会为用户展示20条数据,当用户滚动鼠标或者使用手势将列表滑动到倒数第二 ...

  6. extjs重新激活grid_处理Extjs的gridpanel修改一条记录并重新加载store之后,已选项model的record并没有改变的问题...

    昨天做项目发现一个问题,当修改了grid中的一条选中记录,保存并刷新store之后再次点开或者读取该选中行record发现还是修改之前的值,但是当鼠标选中其它行并再次回到刚刚修改的记录之后,点开或者读 ...

  7. BUG解决:部分JS等资源文件直接加载失败

    记一次BUG解决 记一次BUG解决 问题描述 排查及解决 后续 问题描述 近期用户反映系统经常页面加载不全,功能按钮失效,需要多次刷新才可用,失败率极高,已经影响了用户的使用,我们在本地使用却没有任何 ...

  8. 集成Reveal:不修改您的Xcode工程并加载Reveal

    转载于:http://support.revealapp.com/kb/getting-started/revealxcodereveal 此方法仅适用于在iOS模拟器上运行的应用. 通过不修改Xco ...

  9. vue-1.0-4.0/promis4.3异步请求/父子组件1.0/动态路由3.4/懒加载3.5/导航守卫3.7/-修改文件路径的引用问题......

    1--------------------父子组件传递关系 子组件:props:{ banners:{type:Array,default(){return[]}}} 父组件: 视口模式 npm in ...

最新文章

  1. python中文件读写位置的作用-Python中文件的读写
  2. 远程桌面连接后远程计算机注销,使用windows8.1 pro的远程桌面,当断开远程桌面时被控制端用户注销问题...
  3. ERP系统模块完全解析──工作中心
  4. aop对请求后端的参数修改_Spring Aop 修改目标方法参数和返回值
  5. MySQL 随笔记录
  6. 关于js的function.来自百度知道的回答,学习了.
  7. 一个几何级数的无限和思考
  8. php网站加广告位,HotNews Pro主题文章内容上面添加广告位
  9. hashmap java 便利_java遍历HashMap的高效方法
  10. 人生赢家!带着宝宝去面试~清华90后女学霸范楚楚加入麻省理工MIT任助理教授!...
  11. transactional replication 的immediate_sync属性
  12. 阿里百万架构师打造的 Java并发编程实战笔记,理论到实践一键吃透
  13. ADB usb 或 WiFi 连接手机 ADB工具下载
  14. lc滤波器是利用电感的感抗_由浅入深讲解滤波电路工作原理
  15. android星星闪效果,H5使用canvas实现星星闪烁效果
  16. Java查询月份天数
  17. 屏蔽google adsense和百度推广的广告
  18. 十岁左右的孩子都可以用这样的线条画画
  19. python制作炫酷吊炸天的二维码
  20. 共享汽车充电桩方案开发详解

热门文章

  1. Python爬虫纯干货:单线程、多线程和协程的爬虫性能对比
  2. 2月22日更新《DirectX11的Shader Reflect的几个问题》
  3. [开源] 分享自己用的 GitHub 分组管理工具.
  4. 专业学习的认识与思考
  5. 软件工程师道德规范(转载)
  6. 二次函数对称性的应用
  7. 申明(声明)、定义及默认参数
  8. [python]中 np.int64解释
  9. 混改后联通发力行业云 运营商开始混战云计算
  10. 破解xftp和xshell