1

使用 CustomListAdapter 来动态填充 ListView 并没有被过度记录!很难找到这方面的信息,但我终于让它工作了。

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

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

Box 1
-------
laptops

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

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

只要我不使用未使用的 TextView(即空白和可见),CustomListAdapter 就可以正常工作。但是列表变得很长,显示所有这些空白行。在具有 < 4 个项目的 LinearLayouts(例如 Box 1)中,如果我尝试通过将未使用的 TextViews 的可见性设置为“Gone”来缩小空的垂直空间,数据会以不可预知的方式混乱,即“潜水面具”会出现在 Box 1 而不是 Box 2 中,并且 Box 0 的内容将消失。

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

4

1 回答 1

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 种不同的排列。但是,对于有更多排列的情况,找出问题所在会很好。

于 2012-03-27T06:36:58.970 回答