`
l540151663
  • 浏览: 185458 次
  • 性别: Icon_minigender_1
  • 来自: 浙江
社区版块
存档分类
最新评论

解决ViewPager的addOnPageChangeListener不加载第一个的问题

 
阅读更多
今天在使用ViewPager的时候发现个问题。

需求如下:
在ViewPager底下放入6个Fragment,每次移动ViewPager的时候更新里面的数据。
需求很简单。

我把每次刷新事件放入Fragment初始化中,发现ViewPager有个预缓存功能,至少会加载周边的一个Fragment。当滑动到周边的时候,会发现Fragment中数据没有变化。

我看了下Viewpager源码,v4包下的Viewpager至少加载周边一个Fragment,此值无法修改。

如继承Viewpager创建新控件,发现还是无法修改DEFAULT_OFFSCREEN_PAGES的作用。

如重新实现Viewpager类,发现有部分v4包下的内部类无法获取。不过网上有博客实现了viewPager的功能的新类。

不过问题又来了,我上边有个标题栏,实现滑动效果,使用的控件为android.support.design.widget.TabLayout 。此控件绑定Viewpager。方法为setupWithViewPager(viewPager)。发现自己写的viewpager无法作为此参数。

如果每次在Fragment初始化时加载数据,同时又在Veiwpager的change事件中再加载,会发现加载2次数据,与需求不符。

为了解决加载两次的这个问题,无意发现一个解决方案。

每个Fragement有各自的一个Tag,我通过此值来分辨不同的Fragment。

在Fragment初始化时,做判断,只当Fragment为第一个时,加载数据。代码如下:

public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        if(Fragment.TYPE_ONE.equals(fileType)) {
            loadInfo(fileType);
        }
}

然后在Viewpager界面预加载所有Fragment。代码如下:

viewPager.setOffscreenPageLimit(fragmentList.size());

通过实现viewpager的滑动改变来重新加载数据:
viewPager.addOnPageChangeListener(this);
@Override
    public void onPageSelected(int position) {
      loadInfo(fileType);
    }

测试发现当展现其中的一个Fragment的时候,保证加载一次数据。


分享到:
评论

相关推荐

    Fragment+ViewPager+Tab延迟加载(懒加载)页面

    3. **监听ViewPager的滑动事件**:可以通过`ViewPager.addOnPageChangeListener()`添加一个`PageChangeListener`,在` onPageSelected()`方法中判断是否是当前选中的`Fragment`,如果是,则执行加载数据的逻辑。...

    轮播图ViewPager+ViewPager指示器+可刷新加载的ListView

    在Android应用开发中,"轮播图ViewPager+ViewPager指示器+可刷新加载的ListView"是一个常见的组件组合,常用于构建类似新闻客户端、电商应用等需要展示丰富内容的界面。下面将详细讲解这些组件的工作原理、如何实现...

    ViewPager的正确使用

    这意味着如果你当前在第一页,ViewPager会加载第二页和第三页。可以通过`setOffscreenPageLimit(int limit)`方法调整预加载的页面数量。 5. **自定义页面指示器** 虽然ViewPager自身没有内置的页面指示器,但可以...

    Viewpager仿QQ横滑退出

    为了解决这个问题,我们可以使用`ViewPager`的`addOnPageChangeListener`方法添加一个`PageChangeListener`。在这个监听器中,`onPageScrolled`方法会在页面滑动时被调用,提供当前位置、偏移量和滑动状态等信息。...

    android网络获取图片并在ViewPager中显示

    1. ViewPager组件:ViewPager是一个可以左右滑动查看多个页面的控件,常用于实现类似轮播图的效果。它需要一个PagerAdapter来提供页面。 2. 创建自定义PagerAdapter:继承PagerAdapter或FragmentPagerAdapter,重写...

    ViewPager翻页效果Demo

    ViewPager是Android平台中一个强大的视图滑动组件,主要用于实现多页面间的滑动切换效果,常见于应用的引导页、菜单栏以及图片轮播等场景。在这个“ViewPager翻页效果Demo”中,开发者分享了一个他认为实用的示例,...

    ViewPager 仿微信布局

    6. **优化性能**: 由于ViewPager会预加载相邻的页面,所以如果每个页面都很复杂,可能会导致性能问题。可以通过设置`setOffscreenPageLimit(int limit)`来控制预加载的页面数量,以平衡性能和用户体验。 7. **数据...

    viewpager实现页面切换demo

    在"ViewPagerDemo"项目中,开发者可能会创建一个包含多个图片的列表,然后通过`FragmentPagerAdapter`和自定义的Fragment类来加载和显示这些图片。同时,添加一个简单的指示器,完成一个基础的图片轮播效果。这个...

    ViewPager网络图片无限循环

    2. **无限循环**:要实现ViewPager的无限循环,我们需要在用户滑动到最后一个页面时显示第一个页面,反之亦然。这需要自定义PagerAdapter并重写`getCount()`方法以返回无限大的数量,同时在`instantiateItem()`和`...

    ViewPager详解示例

    ViewPager是Android平台中一个强大的视图滑动组件,主要用于实现页面间的左右滑动切换效果,常见于应用的引导页、菜单栏或者展示多个相关内容的场景。这个“ViewPager详解示例”将带你深入理解并掌握如何在Android...

    ViewPagerGallery-master.rar

    无限轮播的核心思想是通过复制数据集的首尾元素,使用户在滑动到最后一项时能够无缝滑回至第一项,反之亦然,从而达到无边界的感觉。 2. **多图片展示**: - 传统的ViewPager通常只显示一个完整视图,但ViewPager...

    Android viewpager左右滑动效果的例子

    在Android应用开发中,`ViewPager`是一个非常重要的组件,它允许用户通过左右滑动来浏览多个页面,这种交互方式在现代移动应用中广泛使用,比如社交媒体应用、新闻阅读器等。`ViewPager`的设计使得它可以流畅地展示...

    viewpager实现图片自动轮播,带小点标明当前位置

    初始状态下,只有第一个小点被选中(设置为白色或其他突出颜色)。每当ViewPager切换到新的页面时,我们根据当前页面索引更新小点的状态,将对应的小点设为选中,其他小点恢复为未选中状态。 在实际开发中,我们还...

    ViewPageIndicator 和 ViewPager 仿网易新闻客户端Tab标签

    `ViewPageIndicator`则是一个第三方库,由Jake Wharton开发,它为`ViewPager`提供了一种可视化的指示器,通常表现为底部的Tab标签。`ViewPageIndicator`提供了多种样式,如圆点、线条或者文字形式,可以方便地与`...

    玩转ViewPager指示器字体变色

    在Android开发中,ViewPager是一种常用的组件,用于展示多个页面并允许用户通过滑动来切换页面。通常,ViewPager会配合一个指示器(Indicator)来显示当前所处的页面。本篇文章将深入探讨如何实现ViewPager指示器的...

    Android ViewpagerDemo

    通过适配器的特殊实现,可以实现 `ViewPager` 的无限循环效果,使得用户在滑到最后一页时能够滑回第一页,反之亦然。 总的来说,`Android ViewPager` 是一个功能强大的组件,能够帮助开发者构建高度交互的应用界面...

    ViewPager切换图片及自动切换图片

    ViewPager是Android平台中一个强大的视图滑动组件,常用于实现页面间的滑动切换效果,例如在应用的启动页、图片轮播或者Tab标签页等场景。它允许用户通过手势左右滑动来浏览多个相邻的页面,每个页面可以是任何类型...

    Android网络获取图片,显示在ViewPager上

    在Android应用开发中,展示大量图片的一个常见需求是利用ViewPager组件来实现滑动浏览的效果。ViewPager是一个强大的控件,它可以创建一个可以左右滑动的页面视图,常用于实现图片轮播、应用导航等场景。在这个场景...

    android 使用viewpager实现图片轮播,左右可以无限制滑动

    当用户滑到最后一页时,`setCurrentItem()`应将当前页设置为第一页,反之亦然。这可以通过监听`ViewPager`的`addOnPageChangeListener`来实现。 ```java viewPager.addOnPageChangeListener(new ViewPager....

    ViewPager 实现gallery效果+无限循环滚动

    一种常见方法是复制初始的数据集,形成一个“首尾相连”的新数据集,使得在用户滑动到最后一项时,看起来像是回到了第一项,实际上是在展示原始数据集的第一个元素。这需要在PagerAdapter的`instantiateItem()`和`...

Global site tag (gtag.js) - Google Analytics