BaseFragment 解决ViewPager预加载问题
来源:互联网 发布:nokia n9 软件下载 编辑:程序博客网 时间:2024/06/05 16:55
package com.lisn.bdmapplugin.CityOffline;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;/** * 若把初始化内容放到initData实现,就是采用Lazy方式加载的Fragment * 若不需要Lazy加载则initData方法内留空,初始化内容放到initViews即可 * - * -注1: 如果是与ViewPager一起使用,调用的是setUserVisibleHint。 * ------可以调用mViewPager.setOffscreenPageLimit(size),若设置了该属性 则viewpager会缓存指定数量的Fragment * -注2: 如果是通过FragmentTransaction的show和hide的方法来控制显示,调用的是onHiddenChanged. * -注3: 针对初始就show的Fragment 为了触发onHiddenChanged事件 达到lazy效果 需要先hide再show */public abstract class BaseFragment extends Fragment { protected String fragmentTitle; //fragment标题 private boolean isVisible; //是否可见状态 private boolean isPrepared; //标志位,View已经初始化完成。 private boolean isFirstLoad = true; //是否第一次加载 protected LayoutInflater inflater; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { this.inflater = inflater; isFirstLoad = true; View view = initView(inflater, container, savedInstanceState); isPrepared = true; lazyLoad(); return view; } /** 如果是与ViewPager一起使用,调用的是setUserVisibleHint */ @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 */ @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() { } protected void lazyLoad() { if (!isPrepared || !isVisible || !isFirstLoad) { return; } isFirstLoad = false; initData(); } protected abstract View initView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState); protected abstract void initData(); public String getTitle() { return TextUtils.isEmpty(fragmentTitle) ? "" : fragmentTitle; } public void setTitle(String title) { fragmentTitle = title; }}
0 0
- BaseFragment 解决ViewPager预加载问题
- 解决ViewPager预加载问题
- 解决ViewPager取消预加载问题
- 解决ViewPager+Fragment预加载问题
- 解决viewpager预加载
- 关于禁止ViewPager预加载问题,完美解决!
- 解决ViewPager+fragment预加载问题(getItem()两次调用)
- (转)关于禁止ViewPager预加载问题,完美解决!
- 解决TabLayout +ViewPager + Fragment 不让预加载的问题
- 解决viewpager的预加载
- 解决viewpager懒加载的问题
- ViewPager.setOffscreenPageLimit()预加载问题
- ViewPager + Fragment 预加载问题
- ViewPager+Fragment 预加载问题
- android ViewPager预加载问题
- ViewPager预加载问题和onCreateView多次调用问题的解决
- ViewPager预加载问题和onCreateView多次调用问题的解决
- 如何解决ViewPager中的预加载
- 矢量字体-FreeType的移植安装
- scalar 下载安装
- 创建一个几何类型类,其中有计算面积getArea()和周长getPerimeter()抽象方法,然后通过它派生出三角形类、圆形类、矩形类,并通过测试类进行测试
- 写了个小脚本
- 如何培养培智学生体育课兴趣
- BaseFragment 解决ViewPager预加载问题
- UIView
- 算法学习 拓扑排序(TopSort)
- linux 下生成进度条
- 剪格子
- 蓝桥 方格填数
- dubbo配置文件报错
- Android Sqlite 增删改查语法
- zoj3939 The Lucky Week 找规律