Android ViewPager 重复数据问题的解决方法

最近在做的新闻客户端用到了ViewPager,Android Studio如今集成的很好了,自动创建很多不必要写的代码。

在使用过程中碰到了一个很奇怪的事:ViewPager中加载的数据重复

具体的看图就明白了:

 

可以看到加载出来的数据,1、2页面出现了重复,而3恢复正常

在困扰许久之后博主在stackoverflow上面找到了大神的解答:

Because you ware using static variable to show in fragments.When your say static its not a part of the class instance it creates only once and shared among the multiple fragment instance. And you ware changing it in getItem() method , as it is static was reflecting in all fragment instance and repeating.

原文:http://stackoverflow.com/questions/19042842/viewpager-showing-duplicate-data  

根据这个回答解决了这个问题

下面来详细解释一下原因:

这就是问题所在。

会犯这样的错误的Java肯定都没学好╮(╯_╰)╭比如我。。

我们来复习一下Java中static的生命周期吧:

(1)静态局部变量在函数内定义,但不象自动变量那样,当调用时就存在,退出函数时就消失。静态局部变量始终存在着,也就是说它的生存期为整个源程序。 
(2)静态局部变量的生存期虽然为整个源程序,但是其作用域仍与自动变量相同,即只能在定义该变量的函数内使用该变量。退出该函数后,尽管该变量还继续存在,但不能使用它。
(3)允许对构造类静态局部量赋初值。若未赋以初值,则由系统自动赋以0值。

问题就出在第二条

由于我的Item是静态变量,所以在创建下一个的时候“引用了”上一个的Item,Item在上一个创建完成的时候并没有被销毁或者清空而是被下一个所回收利用。在当前这个Item从网络获取数据之前,直接进行了Adapter显示了上一个的数据,而第三个由于回收机制被回收所以是重新从网络获取完数据之后再显示

当把Item的static去除之后

完美的修复了该问题:

以上是我在使用ViewPager中所遇到的问题,如果有什么写错的地方还请大家指正

时间: 2025-01-05 23:21:48

Android ViewPager 重复数据问题的解决方法的相关文章

Android - "已安装了存在签名冲突的同名数据包",解决方法!

错误提示:已安装了存在签名冲突的同名数据包. 解决方法:打开Android Studio,打开logcat,用usb线连接你出错的手机,识别出手机之后,在你的项目后面,点击"run"按钮,随后AS会提示你,你删除先前安装的APP就可以了! 原文地址:https://www.cnblogs.com/sunylat/p/9962767.html

[转载]关于安装Android Studio的一些问题的解决方法

最近在研究Android编程,在Android Studio安装和使用时遇到了麻烦,从园子里找到了<关于安装Android Studio的一些问题的解决方法>的,很多问题找到了解决办法. 问题1:每次Fetching android sdk component information 这是在检查你的 Android SDK .有人会在这里卡上很长时间,很大的原因就是:网络连接有问题.可以通过配置 hosts(fan*qiang) 的方式来解决. 如果想跳过这一步 对策: 在Android St

Android SDK无法显示更新列表解决方法

解决办法: 第一步: 打开Windows中C:\WINDOWS\system32\drivers\etc\hosts,然后添加以下内容: 203.208.46.146 dl.google.com 203.208.46.146 dl-ssl.google.com 74.125.113.121 developer.android.com 第二步: 打开Android SDK Manager,选上方的菜单Tools,进入Options,在"Force https://- "前面打钩,就可以更

Android SDK Manager 更新失败的解决方法

Android SDK Manager 更新失败的解决方法 原文地址 最近使用Android SDK Manager 更新Android SDK tools 发现经常更新失败,获取不到更新信息: Java代码   Fetching https://dl-ssl.google.com/android/repository/addons_list-2.xml Fetched Add-ons List successfully Fetching URL: https://dl-ssl.google.c

sql取出某一列不重复数据的ID解决办法

取出某一列不重复数据的ID表A有ID,BID,ITime三列BID可能会有重复的现在要从A表根据ITime降序排序取出ID来,且如果BID重复就只取第一条数据的ID应该如何实现?------解决方案-------------------- 如果id是递增的select min(id),BID,max(date)from tbl group by BID sql取出某一列不重复数据的ID解决办法,布布扣,bubuko.com

eclipse导入android项目后出现错误的解决方法

eclipse导入android项目后出现错误的解决方法 出现这样的错误是因为没有为项目指定sdk的原因 为项目指定sdk的方法右键点击工程名称,弹出菜单中点击“Properties->Android”,在Project build target 中指定你要使用的SDK版本即可

android4.0 禁止横竖屏切换使用 android:configChanges="orientation|keyboardHidden"无效的解决方法

Android横竖屏幕切换时注意4.0以上配置configChanges要加上screenSize,要不还会调用onCreate(). <activity android:name=".MainActivity" android:configChanges="orientation|keyboardHidden|screenSize"/> android4.0 禁止横竖屏切换使用 android:configChanges="orientati

关于iOS去除数组中重复数据的几种方法

关于iOS去除数组中重复数据的几种方法 在工作工程中我们不必要会遇到,在数组中有重复数据的时候,如何去除重复的数据呢? 第一种:利用NSDictionary的AllKeys(AllValues)方法 可以将NSArray中的元素存入一个字典,然后利用AllKeys或者AllValues取得字典的所有键或值,这些键或值都是去重的.代码: NSArray *dataArray = @[@"2014-04-01",@"2014-04-02",@"2014-04-

在数据库并发情况下避免插入重复数据的一个解决方法

目前公司的项目中碰到一个情况:需要向一个数据表table1中插入记录,该表的结构类似于下面的定义: 列名  类型 是否允许为空 Id int no Area string no AreaIndex int no Name string no 其中Name的值由Area和AreaIndex拼接而成,形式类似于“Area+AreaIndex”.对于相同的Area,AreaIndex从1开始计数,所以对于Area分别为“AA”,“BB”,“CC”的情况,Name的值类似下面这样: AA001 AA00