Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android ViewPager 重復數據問題的解決方法

Android ViewPager 重復數據問題的解決方法

編輯:關於Android編程

最近在做的新聞客戶端用到了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中所遇到的問題,如果有什麼寫錯的地方還請大家指正

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved