2012-03-21 5 views
1

Использование CustomListAdapter для динамического заполнения ListView не является полностью передокументированным! Было очень сложно найти информацию об этом, но я, наконец, получил его работу.Android.Views.ViewStates.Gone в CustomListAdapter, вызывающий непредсказуемые результаты

Таким образом, в моем списке 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 элемента (например, вставка 1), если я попытаюсь сжать пустое вертикальное пространство, установив видимость невидимого TextViews на «Gone», данные будут беспорядочно перемешаны, то есть «маску для дайвинга» будет появляются во Вставке 1 вместо Вставки 2, и содержимое Box 0 исчезнет.

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

+0

Звучит как проблема утилизации. Отправьте свой код адаптера. – dmon

+0

"появится во вставке 1 вместо Box 2, и содержимое Box 0 исчезнет" звучит для меня, как будто вы делаете что-то еще неправильно. Где код, который скрывает TextViews - внутри 'getView'? – zapl

+0

Разве вы не должны удалять элемент из основного, а не скрывать элемент ListView? – Matthew

ответ

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 элементами, другое представление для поля с тремя элементами, другое для поля с двумя элементами и т. Д.) И раздувает соответствующий вид для каждого элемента в (в соответствии с его размером содержимого), отображается динамический список &. Это работает для меня в этой ситуации, так как существует только 5 различных перестановок. Однако было бы неплохо выяснить, в чем проблема, для случаев, когда есть больше перестановок.

Смежные вопросы