2015-09-21 56 views
0

我有一個ListView和一個適配器。簡單的getView代碼可以在下面找到。適配器converView有時爲空

public View getView(final int position, View convertView, ViewGroup parent) { 
    if (convertView == null) { 
     Log.d("mzule", "convertView is null " + position); 
     convertView = mInflater.inflate(R.layout.item_cheap_layout, null); 
    } 
    return convertView; 
} 

當我構建和運行應用程序。我下面有日誌。

D/mzule (25020): converView is null a 0 
D/mzule (25020): converView is null a 1 
D/mzule (25020): converView is null a 2 
D/mzule (25020): converView is null a 3 
D/mzule (25020): converView is null a 4 
D/mzule (25020): converView is null a 5 
D/mzule (25020): converView is null a 16 
D/mzule (25020): converView is null a 32 
D/mzule (25020): converView is null a 47 
D/mzule (25020): converView is null a 38 

很明顯,以前的6個converView是空的。但我不明白爲什麼16,32,47和38th convertView爲null。它使我的ListView laggy。

+0

似乎沒有人得到的問題...我的假設是,你明白的回收... **任何機會,項目的高度可能會不同?** – Selvin

+0

@Selvin是的,不同的一些物品的高度。它會影響convertView?我應該爲不同的高度項目使用不同的viewType嗎? –

+0

*它會影響到convertView?*恕我直言,是的...只是按照這樣的例子...從0到14高度的項目是2 ...所以有5個可見項目和1個需要過渡(fx那裏4個完整的可見項和2個部分 - 第一個和最後一個)...現在第15行的高度是1.5 .... listview需要一個更多...在31有2(或3)行需要1.5 ...等.... *我應該使用不同的viewType作爲不同的高度項目嗎?*如果視圖不完全不同,那麼不... ...它使我的ListView laggy * ... <=關於這個部分...我不認爲如果「convertView爲空」將是問題... – Selvin

回答

-1

看看here。 ListView的回收機制是如何工作的,這是非常好的解釋。

-1

起初,方法getView的調用者會把PARAMS這樣的:

getView(0,null,parent); 

調用者(適配器視圖)會不會把它從getView返回視圖convertView直到有返回一個視圖在getView中。起初,它會將null轉換爲。

-1

您需要了解listview是如何工作的。佈局通貨膨脹是昂貴的。 Listview在視圖回收的概念上工作。 Listview對不可見視圖使用廢料視圖。每次ListView需要在屏幕上顯示一個新行時,它都會從其適配器調用getView()方法。一旦您滾動並且一行移動到移動到可回收池的屏幕上,同時一行添加到屏幕上。如果傳入的行處於可循環池中,它將從池中獲取視圖,否則將創建新行。希望它可以幫助:)

+0

*您需要了解listview是如何工作的*您需要學習閱讀並理解** ...在我們所擁有的問題中*顯然以前的6個converView是空的。但我不明白爲什麼第16,32,47 * ...... <=它暗示**他明白回收** ......他不明白的是爲什麼在32,47等convertView仍然是空的而這個「答案」沒有解釋它 – Selvin

+0

他的代碼沒有任何問題。唯一的事情是他可以使用ViewHolder模式來消除滯後。你怎麼看 ? –

+0

你在哪裏解釋這個:*但我不明白爲什麼第16,32,47和38th convertView是null。*在你的答案?請再次閱讀這個問題:**沒有空值從6到15 ....所以提問者認爲:從6開始應該回收所有視圖...並且他在16位獲得null convertview ...他是問爲什麼?** – Selvin