采用Lazy方式加载的Fragment
来源:互联网 发布:乐高电机有哪些端口 编辑:程序博客网 时间:2024/05/29 17:24
https://github.com/xmagicj/LazyFragment/blob/master/app/src/main/java/com/xmagicj/android/lazyfragment/BaseFragment.java
<span style="font-size:18px;">import android.os.Bundle;import android.support.v4.app.Fragment;import android.text.TextUtils;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;/** * <pre> * 若把初始化内容放到initData实现 * 就是采用Lazy方式加载的Fragment * 若不需要Lazy加载则initData方法内留空,初始化内容放到initViews即可 * * 注1: * 如果是与ViewPager一起使用,调用的是setUserVisibleHint。 * * 注2: * 如果是通过FragmentTransaction的show和hide的方法来控制显示,调用的是onHiddenChanged. * 针对初始就show的Fragment 为了触发onHiddenChanged事件 达到lazy效果 需要先hide再show * eg: * transaction.hide(aFragment); * transaction.show(aFragment); * * Created by Mumu * on 2015/11/2. * </pre> */public abstract class BaseFragment extends Fragment { /** * Fragment title */ public String fragmentTitle; /** * 是否可见状态 */ private boolean isVisible; /** * 标志位,View已经初始化完成。 */ private boolean isPrepared; /** * 是否第一次加载 */ private boolean isFirstLoad = true; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { isFirstLoad = true; View view = initViews(inflater, container, savedInstanceState); isPrepared = true; lazyLoad(); return view; } /** * 如果是与ViewPager一起使用,调用的是setUserVisibleHint * * @param isVisibleToUser 是否显示出来了 */ @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (getUserVisibleHint()) { isVisible = true; onVisible(); } else { isVisible = false; onInvisible(); } } /** * 如果是通过FragmentTransaction的show和hide的方法来控制显示,调用的是onHiddenChanged. * 若是初始就show的Fragment 为了触发该事件 需要先hide再show * * @param hidden */ @Override public void onHiddenChanged(boolean hidden) { super.onHiddenChanged(hidden); if (!hidden) { isVisible = true; onVisible(); } else { isVisible = false; onInvisible(); } } protected void onVisible() { lazyLoad(); } protected void onInvisible() { } /** * 要实现延迟加载Fragment内容,需要在 onCreateView * isPrepared = true; */ protected void lazyLoad() { if (!isPrepared || !isVisible || !isFirstLoad) { return; } isFirstLoad = false; initData(); } protected abstract View initViews(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState); protected abstract void initData(); public String getTitle() { if (null == fragmentTitle) { setDefaultFragmentTitle(null); } return TextUtils.isEmpty(fragmentTitle) ? "" : fragmentTitle; } public void setTitle(String title) { fragmentTitle = title; } /** * 设置fragment的Title直接调用 {@link BaseFragment#setTitle(String)},若不显示该title 可以不做处理 * * @param title 一般用于显示在TabLayout的标题 */ protected abstract void setDefaultFragmentTitle(String title);}</span>
0 1
- 采用Lazy方式加载的Fragment
- Lazy加载的方式
- Fragment的Tab加载方式
- SpringXML方式配置bean的懒加载lazy-init
- 使用Fragment懒加载的一种方式
- Android开发之Fragment的加载方式
- 实现类似微信Viewpager-Fragment的惰性加载,lazy-loading
- fragment(一)加载方式
- Hibernate的Lazy加载策略
- Lazy延时加载的ListView
- ViewPager+Fragment实现懒加载(lazy-loading)
- Fragment基础点滴学习---Activity传递数据到Fragment(Fragment使用静态加载的方式)
- 在activity中加载fragment的两个方式以及获取fragment中的控件的方式
- ViewPager+Fragment懒加载方式
- 【Android进阶篇】Fragment的两种加载方式
- Xamarin Android Fragment的两种加载方式
- Android——Fragment(碎片)的静态加载方式....
- Android——Fragment(碎片)的动态加载方式....
- Lua—第9章协同程序
- C# DEV PopupContainerEdit和PopupContainerControll
- Python
- 【数据结构与算法】二叉树给定两个节点的最短距离(C++实现)
- 锁,同步代码块,同步方法 区别
- 采用Lazy方式加载的Fragment
- Visual SVN 服务器源码备份
- 配置hive元数据存储在mysql中
- css行级行内元素横向居中
- HashTable.HashMap.TreeMap三者之间的区别与联系
- 优化软件性能(7)
- 快速原型设计工具-Axure
- 【FAQ】bash VS dash 字符串正则表达式匹配
- Memcached 基础了解