Android.Views.ViewStates.Gone в CustomListAdapter вызывает непредсказуемые результаты - PullRequest
1 голос
/ 22 марта 2012

Использование CustomListAdapter для динамического заполнения ListView не является чрезмерно документированным!Найти информацию по этому вопросу было очень трудно, но я наконец-то получил ее.

Абстрактно, в моем просмотре списка CustomListAdapter я заполняю список, показывающий набор ящиков и содержимое каждого из них.Допускается до 4 элементов (через LinearLayout textViews) на каждый блок

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

Box 1
-------
laptops

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

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

Пока я оставляю неиспользованные TextViews одними (то есть пустыми и видимыми), CustomListAdapter работает нормально.Но список становится очень длинным со всеми этими пустыми строками.В LinearLayouts с <4 элементами (например, Box 1), если я попытаюсь уменьшить пустое вертикальное пространство, установив видимость неиспользуемых TextViews в «Gone», данные будут перемешаны непредсказуемым образом, то есть «маска погружения» будетпоявляются во вставке 1 вместо вставки 2, и содержимое вставки 0 исчезает. </p>

Кто-нибудь еще испытывал эту непредсказуемость при использовании x.Visibility = ViewStates.Gone в CustomListAdapter?Есть ли лучший способ, чем настройка Android.Views.ViewStates.Gone, чтобы избавиться от вертикального пространства, занимаемого неиспользуемыми TextViews?

1 Ответ

1 голос
/ 27 марта 2012

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 различных перестановок. Однако было бы неплохо выяснить, в чем проблема, для случаев, когда существует больше перестановок.

...