2012-03-21 56 views
1

使用CustomListAdapter動態填充ListView並沒有完全記錄在案!找到這方面的信息非常困難,但我終於找到了工作。Android.Views.ViewStates.Gone在CustomListAdapter中導致無法解釋的結果

抽象地說,在我的listview CustomListAdapter中,我填充一個列表,顯示一堆框和每個框的內容。有每盒

Box 0 
-------- 
shirts 
shoes 
ties 
boxers 

Box 1 
------- 
laptops 

Box 2 
----- 
tennis racket 
basketball 
diving mask 

Box 3 
---------- 
tiles 
grout 

允許(通過textViews的LinearLayout中),四件商品只要我獨自離開閒置TextViews(即空白&可見)的CustomListAdapter工作正常。但是列表顯示所有這些空行顯示的時間很長。如果我嘗試通過將未使用的TextViews的可見性設置爲「Gone」來縮小空的垂直空間,則數據會以不可預知的方式混亂,即「潛水蒙版」將會出現在框1而不是框2中,並且框0的內容將消失。

在CustomListAdapter中使用x.Visibility = ViewStates.Gone時是否有其他人遇到過這種不可預測性?有沒有比設置Android.Views.ViewStates.Gone更好的方式來擺脫未使用的TextViews佔據的垂直空間?

+0

聽起來像回收問題。發佈您的適配器代碼。 「 – dmon 2012-03-21 21:09:42

+0

」將出現在方框1而不是方框2中,並且方框0的內容將消失「給我的聲音,就像你做錯別的事情一樣。隱藏TextView的代碼在'getView'內部? – zapl 2012-03-21 21:11:37

+0

是不是應該從底層最後一項中刪除項目而不是隱藏ListView項目? – Matthew 2012-03-22 05:52:53

回答

1

dmon,zapl,& Matthew:謝謝你的回覆。下面是一些代碼從GetView覆蓋函數內部:

var tv_class_title =view.FindViewById(Resource.Id.tv_class_title) as TextView; 
var tv_codex =view.FindViewById(Resource.Id.tv_codex) as TextView; 

       //class title 
if (item.class_title.Length>0){ 
    tv_class_title.SetText(item.class_title, TextView.BufferType.Spannable); 
}else{ 
    tv_class_title.Visibility  =  Android.Views.ViewStates.Gone; 
} 
       //codex 
if (item.codex.Length>0){ 
    tv_codex.SetText(item.codex, TextView.BufferType.Spannable); 
}else{ 
    tv_codex.Visibility  =  Android.Views.ViewStates.Gone; 
}     

return view; 

我確實找到了這個問題的解決方法。如果我爲每個列表長度創建了不同的視圖(例如,包含4個項目的視圖,包含3個項目的另一個視圖,包含2個項目的包裝的另一個視圖等),併爲每個項目的相應視圖充氣列表(根據其內容大小),動態列表顯示&完美滾動。在這種情況下,這對我很有用,因爲只有5種不同的排列。但是,如果存在更多排列,那麼找出問題所在就很好。