重写ViewPager实现单个帖子进入左右切换和不缓存问题

自定义无缓存的viewPager Viewpager setOffscreenPageLimit(0) 无效 至少会缓存一页 使用此viewpage 代替原生 的 之后设置setOffscreenPageLimit(0) 可不缓存 立即下载

需要解决问题:单个帖子进入时候可以实现左右切换,并且是在不知道帖子总数的情况下,就是不知道ViewPagerAdapter的getCount数量。

由于帖子内容的数据图片和布局比较复杂,所以不让ViewPager缓存,否则消耗内存太大。


重写ViewPager

public class LazyViewPager extends ViewGroup {
	
	private boolean isCanScroll = true;
	
    public boolean isCanScroll() {
		return isCanScroll;
	}

	public void setCanScroll(boolean isCanScroll) {
		this.isCanScroll = isCanScroll;
	}

	private static final String TAG = "LazyViewPager";
    private static final boolean DEBUG = false;

    private static final boolean USE_CACHE = false;

    <span style="color:#ff0000;">private static final int DEFAULT_OFFSCREEN_PAGES = 0;//默认的加载页面,ViewPager是1个,所以会加载两个Fragment</span>
    private static final int MAX_SETTLE_DURATION = 600; // ms


重写ViewPager的setAdapter可以实现单个帖子指定跳转到的页数

public void setAdapter(PagerAdapter adapter,int position) {
        if (mAdapter != null) {
            mAdapter.unregisterDataSetObserver(mObserver);
            mAdapter.startUpdate(this);
            for (int i = 0; i < mItems.size(); i++) {
                final ItemInfo ii = mItems.get(i);
                mAdapter.destroyItem(this, ii.position, ii.object);
            }
            mAdapter.finishUpdate(this);
            mItems.clear();
            removeAllViews();
            mCurItem = 0;
            scrollTo(0, 0);
        }

        mAdapter = adapter;

        if (mAdapter != null) {
            if (mObserver == null) {
                mObserver = new PagerObserver();
            }
            mAdapter.registerDataSetObserver(mObserver);
            mPopulatePending = false;
            if (mRestoredCurItem >= 0) {
                mAdapter.restoreState(mRestoredAdapterState, mRestoredClassLoader);
               <span style="color:#ff0000;"> if(position>0){
                	setCurrentItemInternal(position, false, true);
                }else{
                	setCurrentItemInternal(mRestoredCurItem, false, true);
                }</span>
                mRestoredCurItem = -1;
                mRestoredAdapterState = null;
                mRestoredClassLoader = null;
            } else {
                populate(position);
            }
        }
    }

不过前提是设置这个ViewPager的Adapter的getCount的数量为1000或者Integer.Max


如果要实现ViewPager的Fragment不重复执行onCreateView方法,需要重写destroyItem

private class MyFragmentAdapter extends FragmentPagerAdapter{

		public MyFragmentAdapter(FragmentManager fm) {
			super(fm);
			// TODO Auto-generated constructor stub
		}

		@Override
		public Fragment getItem(int arg0) {
			// TODO Auto-generated method stub
			MyFragment fragment = new MyFragment(arg0);
			return fragment;
		}

		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return 10;
		}
		
		@Override
		public void destroyItem(ViewGroup container, int position, Object object) {
			// TODO Auto-generated method stub
//			super.destroyItem(container, position, object);
		}
		
		@Override
		public void destroyItem(View container, int position, Object object) {
			// TODO Auto-generated method stub
//			super.destroyItem(container, position, object);
		}
	}

如果要设置ViewPager实现左右无限切换,可以通过重写Adapter的getItem()方法,


@Override
		public Fragment getItem(int arg0) {
			// TODO Auto-generated method stub
			MyFragment fragment = fragments.get(arg0%4);
			return fragment;
		}

前提是getCount是个很大的数

复制去Google翻译 翻译结果
新 MyFragment ( 为arg0 )
解决viewPagerAdapter数据不更新问题 解决viewPagerAdapter数据不更新问题。本demo是四个页面的导航和viewpager滑动。解决了数据错乱,适配器不更新等问题。 立即下载

相关推荐

ViewPager控制缓存页面数量及数据懒加载

ViewPager控制缓存页面数量及数据懒加载

Android小技巧之不缓存的ViewPager

前言在开发中我们会经常用到ViewPager这个类,比如引导页的啦,主页啦,等等之类的。一般情况下,我在ViewPger中都是放的Framgnt,这样简单有方便,但是ViewPager却会默认的缓存当前页面的最近两个页面,于是问题就产生了,我们的需求是只有切换到哪页,哪页才创建或者加载布局,但是谷歌官方的ViewPager却没有自带这个选项,就算我们用setOffscreenPageLimit(0)

AndroidRookie 1万+

ViewPager+Fragment取消预加载(延迟加载)

ViewPager+Fragment取消预加载(延迟加载),详情请看:http://blog.youkuaiyun.com/myatlantis/article/details/42643733

android viewpager+fragment 避免预加载,缓存

一、需求是这样的:滑动到哪一页就在家一页的数据,避免预加载 二、由于使用setOffScreenLimit无效 解决办法: 注意:setUserVisibleHint,使用这个方法来完成切换到哪一页才加载哪一页 /** * 育儿知识tab栏 * * @author Administrator * */ public class GestateKnowledgeBa

小钟的专栏 4740

从Starlink看NTN:SSB波束数量少,用户体验真的会差吗?

当SpaceX的Starlink以每月新增上百颗卫星的速度扩张其星座时,一个有趣的技术现象正在引发行业讨论:为何这个全球最大的低轨卫星网络选择使用相对较少的波束数量?波束数量的选择远非简单的技术参数,而是系统设计哲学、商业策略与终端用户体验的复杂平衡。传统地面网络可以依赖密集基站实现精准覆盖,而卫星通信必须面对一个根本性挑战:如何在数百公里的高空,用有限的射频资源服务广阔的地理区域。当我们在撒哈拉沙漠测试不同波束方案时,发现了一个关键洞见:最佳波束数量不是固定的技术参数,而是随网络发展阶段变化的动态值。

weixin_32308101的博客 332

看不懂分子动力学模拟的结果?一文读懂RMSD曲线

随后,将每一帧结构与初始模板进行叠合,计算对应原子的平均偏移量,即RMSD。总之,掌握 RMSD 的解读方法,就等于抓住了评估分子动力学模拟成败与质量的“总开关”。①在模拟初始阶段,RMSD会从0迅速上升,这是蛋白质从静态晶体或模型结构释放到溶液环境中并逐渐适应的正常过程。②经过一段时间后,曲线不再系统性上升或下降,而是围绕一个平均值,小幅度地上下波动,形成一个稳定的“平台”。这种情况下,RMSD 在初始快速上升后,并未进入平台,而是持续甚至加速上升,始终未见收敛。🔍 如何解读不同趋势的RMSD曲线。

weixin_46587777的博客 4887

ViewPager禁止滑动,设置页片间距,设置当前显示的页面,缓存个数,以及解决嵌套ViewPager左右滑动冲突问题

使用一个类继承ViewPager,重写onTouchEvent方法,返回false,禁止滑动 @Override public boolean onTouchEvent(MotionEvent ev) { return false;//去掉父类处理事件能力,自己不消费 }设置页片间距mViewPager.setPageMargin(45);//其中数字为像素设

WhatYouSeeMe的博客 1342

手势控制 Python !Leap Motion Python 开发教程 (二)

手势控制 Python !Leap Motion Python 开发教程 (二) 现在进入正题,我来给大家总结一下我在使用 Leap Motion 开发过程中的经验以及学到的东西,其中我会概括以及翻译官方给出的注释,为了让这些注释更加通俗易懂,让大家更好理解。 回顾 在上一篇文章中我们讲了如何配置 Leap Motion 的 Python 2.7 的开发环境,如果您还没有配置好您的开发环境,可以参...

成畅的博客 3193

viewpager取消预存的方法

经常看到网上有增加预存的方法,很少看见怎么取消,这次碰到的需求很特别,因为viewpager所显示的图片需要实时的服务器中取,而服务器的并发是有限的,且服务器有些陈旧,如果我每次进入viewpager页面,就进行三次请求,增加了服务器的负荷,所以要取消预存,网上说的方法有很多,其中一个比较常见的就是 mVpPager.setOffscreenPageLimit(0); 但是试过之后发现,这个方

coinguoyi的博客 799

STM32驱动HC-SR04超声波模块:两种精准测距方案详解

本文详解STM32驱动HC-SR04超声波模块的两种精准测距方案:定时器中断计数法和外部中断边沿检测法。涵盖硬件连接、代码实现与优化技巧,帮助开发者根据精度和复杂度需求选择合适方案,提升超声波测距在嵌入式项目中的稳定性和准确性。

g5h6i的博客 683

blender中合并的模型,在threejs中显示多个mesh;blender多材质烘培成一个材质

5、优化项(省略此步骤,直接进行步骤6),进入到视图着色方式(此时没有灯光,整体偏暗,如果不调整灯光,烘培出来的材质也偏暗,因此此步骤为优化项,通畅建议调整)。在右边栏进入世界环境,调整颜色。7、烘焙成功之后,新建一个材质,将第三步创建的纹理图像作为材质的纹理,连接到基础色,并把模型的材质改为此材质,其他的材质全部删除。2、处理uv,在侧边栏选择数据-uv贴图,选中使用的uv,进入编辑模式,全选,键盘u,选择智能uv投射。3、处理材质,在侧边栏选择材质,进入着色,在着色器编辑器新建一个图像纹理,新建图像。

AllBluefm的专栏 2529

重写ViewPager实施单一交有关切换到这个问题,并没有缓存

我们需要解决这个问题:切换时,可以实现单独的消息到左和右,但我不知道的情况下根据岗位总数。只是不知道ViewPagerAdapter的getCount数量。 因为帖子内容的数据图片和布局比較复杂。所以不让ViewPager缓存。否则消耗内存太大。 重写ViewPager public class LazyViewPager extends View...

weixin_34007906的博客 64

embedding计算过程

文章目录embedding计算过程(错了跟我讲,我会改)参考示例个人理解过程图示总结(基于pytorch) embedding计算过程(错了跟我讲,我会改) 参考示例 https://www.jianshu.com/p/63e7acc5e890 个人理解过程图示 总结(基于pytorch) 总的来说,就是将独热向量的长度(对应嵌入层的num_embeddings)转变为嵌入层的emdedding_size(而独热向量的维数就是你的数据中一共产生了多少个不一样的词,至少是这么多)。 数据的变化,将二维

纸上得来终觉浅,绝知此事要躬行! 1631

ViewPager + TabLayout + Fragment 页面刷新问题

ViewPager + TabLayout + Fragment 页面刷新问题 在做多Fragment Tab界面嵌套多Fragment时,我们经常使用ViewPager + TabLayout + Fragment的方式实现, 使用方法 adapter = new MyFragmentStatePagerAdapter(getFragmentManager(), 0); viewPager.setAdapter(adapter); tabLayout.setupWithViewPager(view

gxlgxjhll的博客 1077

自动化Google Chrome的强大工具:chromedriver下载、安装、简单使用

本文介绍了 ChromeDriver 的基本概念和安装配置方法,重点讲解了如何通过 Selenium 实现 Chrome 浏览器的自动化测试。内容涵盖了 ChromeDriver 下载、版本匹配、依赖引入和简单的自动化测试脚本示例,帮助读者快速上手并避免常见问题。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 88万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

ViewPager 应用举例

ViewPager 应用举例

xie__jin__cheng的博客 480

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

基于Eclipse的Android应用开发实战:从MVC架构到完整项目构建

Android应用开发的核心在于理解其架构模式与工程化实践。经典的MVC(Model-View-Controller)架构清晰地分离了数据、界面与逻辑,为应用的可维护性奠定了基础。通过模块化设计与异步处理机制,开发者能够构建响应迅速、用户体验良好的应用。在工程实践中,数据持久化方案如SQLite数据库与SharedPreferences,以及多媒体处理如VideoView的视频播放,是实现核心功能的关键技术。这些技术共同支撑了在线教育、内容消费等复杂场景的应用开发。本文以“博学谷”这一综合性学习应用为例,详

weixin_30628801的博客 308

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Android关于ViewPager+Fragment缓存问题

Android关于ViewPager+Fragment缓存问题 场景需求 在ViewPager里根据后台返回,动态New添加N个同类型Fragment碎片对象 出现问题 第一次添加N个Fragment并赋值,没有任何问题。 第二次切换新的N个Fragment并赋值,出现赋值了之后,Fragment中还是之前赋值的参数。 问题解决 ViewPager.FragmentPagerAdapter 重写回调方法:getItemId mBinding.vpager.setAdapter(new FragmentPag

投投的博客 1323

ViewPager+Fragment取消预加载、禁止滑动以及更新

取消预加载 网上了解了很多取消预加载的方法,里面提到了使用一个viewpager的public方法setOffscreenPageLimit经过查看源码以及验证发现该方法是管理Viewpager预加载的页数,最低也是默认为一页(例如ViewPager一共有4页,当前手机屏幕显示第一页,那么第二页已经被缓存了)。如果你想多缓存几页可以通过该方法进行设置;所以想要完全取消预加载(一页都不缓存,只

qq1170762202的博客 589

ViewPager中的Fragment的生命周期

ViewPager中的Fragment生命周期今天踩了个巨坑….当我在使用ViewPager+fragment时,我在一个ViewPager中放置了4个fragment,这时fragment的生命周期是很无语的….比如我从第一个fragment切换到第二个fragment(就是ViewPager滑动了一下),然后第一个fragment的生命周期居然不回调onPause(),也不回调onStop();

潇风寒月 1194

android-viewpager setCurrentItem和滑动切换fragment的区别

   在不缓存的viewpager里面有两个fragment1,fragment2;当滑动切换的时候,    fragment1滑动到fragment2生命周期是:fragment1.onstop()-&gt;fragment2.onResume();    但是当使用setCurrentItem(1)的时候,生命周期是:fragment2.onResume()-&gt;fragment1.o...

u014385442的专栏 2003

ViewPager取消缓存策略

APP开中经常用到ViewPager+Fragment+FragmentPagerAdapter这样的组合,但ViewPager自带缓存策略,所以每次ViewPager都会预加载下一页的内容,这样就导致滑动ViewPager进行切换时,都是加载的不是当前选项页的数据,而是下一个页面数据。那有没有办法干掉ViewPager的预加载功能,方法当然是有,但必须要将v4包下ViewPager的相关代进行修改

lxfeng1098751554的专栏 1万+

解决viewpager懒加载的问题

一个类解决你的懒加载问题,系统默认的viewpager加载的个数是3 ,我们可以通过重写viewpager来实现viewpager的懒加载,代码如下:/* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License");

风起云涌 2066
上一篇: Android中的soundpool小结
下一篇: Android应用源码专业设计师网站客户端项目
fancylovejava
博客等级 码龄16年 1052粉丝 184原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值