分享一个没有bug的我修改改良过的Fragment懒加载代码
很多时候 一个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懒加载代码相关推荐
- 懒加载(延迟加载)之后,在使用数据过程中容易出现的bug
在UI中,使用懒加载,也就是延迟加载来加载数据的时候,总是会面临几个问题? 如:1. >为什么先创建NSArray属性? 2. >为什么重写NSArray的get方法? 3.>为什么 ...
- load方法引入本地html报错,分享基于plus.downloader的图片懒加载功能,支持本地缓存v1.1.0...
今天试用了下hello mui上的图片懒加载功能,发现有些地方还无法满足我的需求,ajax动态加载的时候无法实现懒加载. 然后又看了下36kr的示例,因为代码关系实在太多了,耦合度比较高,遂自己动手写 ...
- bootstraptable treeGrid 懒加载_为 Vue 的惰性加载加一个进度条
简介 通常用 编写单页应用(SPA)时,当加载页面时,所有必需的资源(如 JavaScript 和 CSS 文件)都会被一起加载.在处理大文件时,这可能会导致用户体验不佳. 借助 Webpack,可以 ...
- 一个简单的图片懒加载
一个简单的图片懒加载 所谓懒加载,是为了提高网页的打开的速度,获得更好用户体验的一种手段.其选择的重要的部分先加载,次要的部分需要的时候再加载.比如一个电商网站,首屏通常有很多的数据,清晰度较高的 b ...
- 分享大麦UWP版本开发历程-03.GridView或ListView 滚动底部自动加载后续数据
今天跟大家分享的是大麦UWP客户端,在分类.订单或是搜索时都用到的一个小技巧,技术粗糙大神勿喷. 以大麦分类举例,默认打开的时候,会为用户展示20条数据,当用户滚动鼠标或者使用手势将列表滑动到倒数第二 ...
- extjs重新激活grid_处理Extjs的gridpanel修改一条记录并重新加载store之后,已选项model的record并没有改变的问题...
昨天做项目发现一个问题,当修改了grid中的一条选中记录,保存并刷新store之后再次点开或者读取该选中行record发现还是修改之前的值,但是当鼠标选中其它行并再次回到刚刚修改的记录之后,点开或者读 ...
- BUG解决:部分JS等资源文件直接加载失败
记一次BUG解决 记一次BUG解决 问题描述 排查及解决 后续 问题描述 近期用户反映系统经常页面加载不全,功能按钮失效,需要多次刷新才可用,失败率极高,已经影响了用户的使用,我们在本地使用却没有任何 ...
- 集成Reveal:不修改您的Xcode工程并加载Reveal
转载于:http://support.revealapp.com/kb/getting-started/revealxcodereveal 此方法仅适用于在iOS模拟器上运行的应用. 通过不修改Xco ...
- vue-1.0-4.0/promis4.3异步请求/父子组件1.0/动态路由3.4/懒加载3.5/导航守卫3.7/-修改文件路径的引用问题......
1--------------------父子组件传递关系 子组件:props:{ banners:{type:Array,default(){return[]}}} 父组件: 视口模式 npm in ...
最新文章
- python中文件读写位置的作用-Python中文件的读写
- 远程桌面连接后远程计算机注销,使用windows8.1 pro的远程桌面,当断开远程桌面时被控制端用户注销问题...
- ERP系统模块完全解析──工作中心
- aop对请求后端的参数修改_Spring Aop 修改目标方法参数和返回值
- MySQL 随笔记录
- 关于js的function.来自百度知道的回答,学习了.
- 一个几何级数的无限和思考
- php网站加广告位,HotNews Pro主题文章内容上面添加广告位
- hashmap java 便利_java遍历HashMap的高效方法
- 人生赢家!带着宝宝去面试~清华90后女学霸范楚楚加入麻省理工MIT任助理教授!...
- transactional replication 的immediate_sync属性
- 阿里百万架构师打造的 Java并发编程实战笔记,理论到实践一键吃透
- ADB usb 或 WiFi 连接手机 ADB工具下载
- lc滤波器是利用电感的感抗_由浅入深讲解滤波电路工作原理
- android星星闪效果,H5使用canvas实现星星闪烁效果
- Java查询月份天数
- 屏蔽google adsense和百度推广的广告
- 十岁左右的孩子都可以用这样的线条画画
- python制作炫酷吊炸天的二维码
- 共享汽车充电桩方案开发详解