Android - ViewPager+Fragment初始化问题

Android应用开发中,经常会用到ViewPager + Fragment,虽然效果不错,但随之而来的还有一些问题,下面就说说其中的初始化问题。

ViewPager初始化时会预加载前后的2个页面,即使设置了setOffscreenPageLimit(0); 它至少也会预加载一个页面

但在实际场景中,可能我们不需要这个预加载的功能,这时我们就需要对其进行一些控制。

我使用的方法是setUserVisibleHint(boolean isVisibleToUser)

每次ViewPager预加载页面的时候,被预加载的Fragment都会调用这个方法,所以我就通过这个方法来控制Fragment里面的数据初始化

使用前提是Fragment页面的数量不是很多,设置setOffscreenPageLimit(所有Fragment的数量);

原因是如果不全部预加载,那么当滑动页面超出预加载范围之后,就会有页面被销毁,那么这个控制方法就失效了,当然,如果没有特殊的需求

不设置这个方法也不会有问题,主要看自己的需求。

具体方法如下:

public boolean canExcute = true;//为了onActivityCreated中setUserVisibleHint方法只执行一次

public boolean isFirstExcute = true;//标记页面是否是第一次加载,为了初始化只执行一次

@Override
 public void onActivityCreated(Bundle savedInstanceState) {
  super.onActivityCreated(savedInstanceState);
  if (canExcute) {//页面第一次加载时执行,以后不在执行
   canExcute = false;
   setUserVisibleHint(getUserVisibleHint());
  }
 }

@Override
 public void setUserVisibleHint(boolean isVisibleToUser) {
  super.setUserVisibleHint(isVisibleToUser);
  if (canExcute) {//onActivityCreated方法执行之前,不让此方法执行

return;
  }
  if (isVisibleToUser && isFirstExcute) {// 页面可见并且是第一次加载
   isFirstExcute= false;//标记页面已经加载过一次,以后不需要在执行
   initData();//把你只需要初始化一次的数据写在这个方法里面
  }
  if (getUserVisibleHint()) {// 页面每次对用户可见时执行

} else {
      
  }
 }

以上方法不一定对所有场景都适用,大家使用时还是需要经过测试并改进。

时间: 2024-10-11 03:12:36

Android - ViewPager+Fragment初始化问题的相关文章

Android ViewPager Fragment使用懒加载提升性能

?? Android ViewPager Fragment使用懒加载提升性能 Fragment在如今的Android开发中越来越普遍,但是当ViewPager结合Fragment时候,由于Android ViewPager内在的加载机制,导致一个比较严重的加载性能问题,具体来说,假设一个ViewPager中有n多个Fragment,那么ViewPager在初始化阶段将一次性的初始化FragmentPagerAdapter中的至少3个Fragment(如果Fragment多于3),创建和加载Fra

Android——ViewPager+Fragment+ListView之间

Android--ViewPager+Fragment+ListView之间 <span style="font-size:18px;">package com.example.jreduch05; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.view.ViewPager; import android.support.v7.app.A

android viewpager fragment切换时界面卡顿解决办法

目前开发的程序在切换View时界面卡顿现象比较严重,影响用户体验,当前项目共就四个View,每个View也只是按钮,所以可以同时加载,不让其它view销毁. 只需在Adapter中重载destroyItem类即可 @Override public void destroyItem(ViewGroup container, int position, Object object) { //重载该方法,防止其它视图被销毁,防止加载视图卡顿 //super.destroyItem(container,

Android ViewPager + Fragment的布局

ViewPager And Fragment 1.之前有篇博客是讲ViewPager的用法的:http://www.cnblogs.com/liangstudyhome/p/3773156.html 2.这里用ViewPager+Fragment做个导航界面: 效果图如下: 3.对实现的思路进行一个简单的介绍: 上面的导航菜单里面的选项卡的总长度是超过了屏幕的,所以用了一个自定义HorizontalScrollView,在自定义HorizontalScrollView中加了两个箭头的图片根据滚动

Android ViewPager+Fragment滑动选项卡,tab点击选项卡

有一段时间一直再研究这个,自Android 3.0以后,很少开发者再用以前的TabWidget控件了.那种效果不是很好,也不能滑动.后来陆续出现了各种各样滑动选项卡,每种的出现都各有优势吧.但我还是推荐ViewPager+Fragment滑动选项卡,tab点击选项卡.因为横屏或者竖屏效果都还不错,针对这种效果,还有一种开源框架的出现.接下来会有所介绍. 转载请注明出处:http://blog.csdn.net/qq_16064871 本文demo下载:请点击 一.ViewPagerActivit

android viewpager + fragment 选中当前fragment再触发一些事情的问题

最近项目中遇到一个问题: 背景:使用viewpager+fragment实现首页的滑动:然后需要在第三个fragment被选中时自动弹出对话框. 解决方法: 1.在 vp.setOnPageChangeListener(new OnPageChangeListener() { @Override public void onPageSelected(int arg0) { //arg0为选中当前的fragment的位置,可以处理一些业务. } } 2.frgment提供了一个方法 @Overri

Android Viewpager+Fragment实现滑动标签页

ViewPager 结合Fragment实现一个Activity里包含多个可滑动的标签页,每个标签页可以有独立的布局及响应. 主页布局 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="mat

Android viewpager + fragment取消预加载

1,在fragment中重写setUserVisibleHint方法private boolean isVisibleToUser;@Overridepublic void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); this.isVisibleToUser = isVisibleToUser; if (isVisibleToUser) { // TODO:1,如

android viewpager + fragment

参考: http://blog.csdn.net/harvic880925/article/details/38660861 http://blog.csdn.net/guolin_blog/article/details/26365683 http://blog.csdn.net/singwhatiwanna/article/details/17201587 http://blog.csdn.net/singwhatiwanna/article/details/17201587