CustomListAdapter中的Android.Views.ViewStates.Gone导致无法预测的结果



使用CustomListAdapter动态填充ListView并没有写得太多!一直很难找到这方面的信息,但我终于把它发挥了作用。

抽象地说,在我的listview CustomListAdapter中,我填充了一个列表,其中显示了一堆框和每个框的内容。每盒最多允许4个项目(通过文本视图的LinearLayout)

Box 0
--------
shirts
shoes
ties
boxers
Box 1
-------
laptops
Box 2
-----
tennis racket
basketball
diving mask
Box 3
----------
tiles
grout

只要我保留未使用的TextViews(即空白和可见),CustomListAdapter就可以正常工作。但是,由于显示了所有这些空行,列表变得非常长。在带有<4项(如框1),如果我试图通过将未使用的TextViews的可见性设置为"消失"来缩小空白的垂直空间,数据会以不可预测的方式混乱起来,即"潜水掩码"将出现在框1而不是框2中,框0的内容将消失。

在CustomListAdapter中使用x.Visibility=ViewStates.Gone时,是否有其他人经历过这种不可预测性?有没有比设置Android.Views.ViewStates.Gone更好的方法来消除未使用的TextViews占用的垂直空间?

dmon,zapl,&马修:谢谢你的回复。以下是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种不同的排列。然而,对于有更多排列的情况,弄清楚问题是什么会很好。

最新更新