Android ViewPager 重複資料問題的解決方案

來源:互聯網
上載者:User

標籤:

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

 

Android ViewPager 重複資料問題的解決方案

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.