ViewPager预加载问题和onCreateView多次调用问题的解决
2015-07-22 14:48
441 查看
现在大体上放置ViewPager预加载的方法有两种:
1,在使用ViewPager嵌套Fragment的时候,由于VIewPager的几个Adapter的设置来说,都会有一定的预加载(默认是左右各一个Frament)。通过设置setOffscreenPageLimit(int number)
来设置预加载的熟练,在V4包中,默认的预加载是1,即使你设置为0,也是不起作用的,设置的只能是大于1才会有效果的。我们需要通过更改V4包中的默认属性才可以。
2.限制预加载,会出现滑动过程中卡顿现象。其实Fragment中防止预加载主要是防止数据的预加载,Fragment中的VIew预加载是有好处的,我们可以通过Fragment中的一个方法来达到预加载View 但是不加载数据,在Fragment显示的时候才去加载数据。
下面是我写的代码:
通过在这个方法中去加载数据,我发现可以一定程度的实现预加载问题,保证了预加载不会加载数据,只会加载Fragment中的VIew,这样就可以保证了VIewPager滑动的流畅性,也保证了只有切换到一个Fragment的时候才去加载数据的目的。
我觉得这种方法比修改V4包中的预加载数量好的多啊。
参考:http://www.bubuko.com/infodetail-535920.html
1,在使用ViewPager嵌套Fragment的时候,由于VIewPager的几个Adapter的设置来说,都会有一定的预加载(默认是左右各一个Frament)。通过设置setOffscreenPageLimit(int number)
来设置预加载的熟练,在V4包中,默认的预加载是1,即使你设置为0,也是不起作用的,设置的只能是大于1才会有效果的。我们需要通过更改V4包中的默认属性才可以。
2.限制预加载,会出现滑动过程中卡顿现象。其实Fragment中防止预加载主要是防止数据的预加载,Fragment中的VIew预加载是有好处的,我们可以通过Fragment中的一个方法来达到预加载View 但是不加载数据,在Fragment显示的时候才去加载数据。
下面是我写的代码:
import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.bajiebao.app.R; public class ViewPagerFragment extends Fragment { private View mContentView; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { /** * 防止Fragment多次切换时调用onCreateView重新加载View */ if (null == mContentView) { mContentView = inflater.inflate(R.layout.fragment_viewpager, null); init(); /** * 为了保证一开始加载Fragment的时候判断是否需要加载数据 */ if (getUserVisibleHint()) { getNewComerInfo(true); } } else { /** * 缓存的rootView需要判断是否已经被加过parent, * 如果有parent需要从parent删除,要不然会发生这个rootview已经有parent的错误。 */ ViewGroup parent = (ViewGroup) mContentView.getParent(); if (parent != null) { parent.removeView(mContentView); } } return mContentView; } @Override public void setUserVisibleHint(boolean isVisibleToUser) { /** * 判断此Fragment是否正在前台显示 * 通过判断就知道是否要进行数据加载了 */ if (isVisibleToUser && isVisible()) { getNewComerInfo(true); } super.setUserVisibleHint(isVisibleToUser); } }
通过在这个方法中去加载数据,我发现可以一定程度的实现预加载问题,保证了预加载不会加载数据,只会加载Fragment中的VIew,这样就可以保证了VIewPager滑动的流畅性,也保证了只有切换到一个Fragment的时候才去加载数据的目的。
我觉得这种方法比修改V4包中的预加载数量好的多啊。
参考:http://www.bubuko.com/infodetail-535920.html
相关文章推荐
- Hadoop学习笔记—20.网站日志分析项目案例(一)项目介绍
- MyEclipse 手动安装Velocity 编辑器
- 记一次苦逼的SQL查询优化
- 长期目标
- 语音通话 切换扬声器和听筒
- 机器周期,时钟周期等概念
- sshd问题:A protocol error occurred. Change of username or service not allowed
- 对于heml和css的粗浅见解
- ( Incomplete ) Cholesky decomposition
- 关于android下SurfaceView后台录视频牌拍照的思路
- DirectX:函数连接两个随机filter
- unity针对iphone的屏幕旋转
- H5照片预览
- golang 系统包自动填写插件
- Vxlan 原理
- sqlserver 获取时间年月日时分秒
- GRE写作必备句型
- weka学习--详细的调用文档
- 设计模式之工厂方法模式
- redis删除数据后内存释放问题