Fragment实现懒加载
来源:互联网 发布:python 网络爬虫代码 编辑:程序博客网 时间:2024/06/05 03:48
引言
Fragment是目前使用最广泛的组件之一,作为轻量级的布局承载组件,只有当它和v4包的ViewPager结合才是Perfect。
在平常开发中,基本ViewPager中适配Fragment是必不可少的,然而当每个Fragment中的数据量大加载缓慢,在每个Fragment之间切换时将会不断地进行数据请求,对于ViewPager而言,他会默认加载当前可见的Fragment的前一个和后一个Fragment,这里ViewPager中有一个方法setOffscreenPageLimit(int limit)用来设置预加载的页面的数量,默认为1,所以只能设置预加载页面比一个多不能设置预加载为0。既然ViewPager无法改变,那就只有从Fragment中想办法了,这里fragment中有一个setUserVisibleHint(boolean isVisibleToUser)方法,该方法在onCreateView之前执行,我们看一下官方对该方法的解释:
Set a hint to the system about whether this fragment's UI is currently visible to the user. This hint defaults to true and is persistent across fragment instance state save and restore.An app may set this to false to indicate that the fragment's UI is scrolled out of visibility or is otherwise not directly visible to the user. This may be used by the system to prioritize operations such as fragment lifecycle updates or loader ordering behavior.
好了,我们就在这里下文章,在该方法中对传入的参数判断当前Fragment是否可见,不可见时,只创建视图但是不会加载数据,而且只加载一次。下面就是我封装的关于创建一个基类的Fragment,继承实现抽象方法就行了:
package com.example.luweicheng.lazyloadfragment.fragments;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v4.app.Fragment;import android.util.Log;import android.util.SparseArray;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;/** * Created by luweicheng on 2016/12/19. * 懒加载fragment基类 */public abstract class BaseFragment extends Fragment { private static final String TAG = "BaseFragment"; private Boolean isVisible = false;//是否可见 private Boolean isCreateView = false;//是否UI创建完成 private Boolean isFirstLoad= true;//是否是第一次加载 private View convertView; //fragment根View private SparseArray<View> mViews; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { convertView = inflater.inflate(getLayoutId(),null); mViews = new SparseArray<>(); bindView(convertView); isCreateView = true; return convertView; } /** * 绑定控件监听等操作 */ protected abstract void bindView(View convertView); /** * 返回布局id * @return */ protected abstract int getLayoutId(); /** * 加载数据操作 * */ protected abstract void loadData(); @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if(isVisibleToUser){ isVisible = true; }else{ isVisible = false; return; } } @Override public void onStart() { super.onStart(); lazyLoadData(); } /** * 判断是否加载数据 */ private void lazyLoadData(){ if(isFirstLoad){ Log.e(TAG, "lazyLoadDta:第一次加载" ); }else{ Log.e(TAG, "lazyLoadDta: 不是第一次加载" ); } Log.e(TAG, "lazyLoadData: "+isFirstLoad+isVisible+isCreateView ); if(!isFirstLoad||!isCreateView||!isVisible){ Log.e(TAG, "lazyLoadDta: 不加载" ); return; } Log.e(TAG, "lazyLoadDta: 完成数据的第一次加载" ); loadData(); isFirstLoad = false; }}
这是Demo源码存放在GitHub点击查看
0 0
- Fragment实现懒加载
- Fragment实现懒加载
- Fragment实现懒加载
- ViewPager实现Fragment懒加载
- Android Fragment实现懒加载
- viewpager fragment 实现懒加载
- Android Fragment 实现懒加载
- ViewPager + Fragment实现懒加载
- ViewPager+Fragment实现懒加载
- ViewPager+Fragment实现懒加载
- Android 实现fragment懒加载
- Fragment的setUserVisibleHint方法实现懒加载
- Fragment的setUserVisibleHint方法实现懒加载
- Fragment的setUserVisibleHint方法实现懒加载
- Fragment的setUserVisibleHint方法实现懒加载
- Fragment的setUserVisibleHint方法实现懒加载
- Fragment的setUserVisibleHint方法实现懒加载
- android——Fragment实现懒加载
- 开源项目源码阅读方法
- visual studio 2015 异常错误:HRSULT:0x8CE0000B
- Eslint 规则说明
- 双向循环链表
- 树梅派应用26:树莓派做FM发射器架设小型电台
- Fragment实现懒加载
- 简单的带缩略图功能原生JS轮播图讲解。
- C#判断机器是32位还是64位
- ppp协议说明
- 敏捷开发方法
- C语言总结(3)
- 树梅派应用27:通过USB蓝牙适配器连接BLE设备
- Java之文件流
- Java 中 int 转 char