2011-01-21 3 views
2

Я работаю с пользовательским ExpandableList (см. Рисунок ниже), где каждый элемент всегда имеет одного ребенка. Этот ребенок состоит из трех частей. Каждая часть имеет заголовок (красные полосы), а ниже - пустой элемент или список элементов. Длина этого списка будет отличаться.Как использовать ListView внутри расширяемого списка?

Первый способ, которым я пытался это сделать, - добавить ViewStub ниже пустого элемента, который я надул с помощью пользовательского представления, в котором также был ViewStub в конце, который я раздул по очереди для следующего элемента, добавив элементы рекурсивно для создания такого списка элементов. К сожалению, это привело к тому, что StackOverflowError, когда список стал слишком длинным (с короткими списками это работало отлично).

Итак, во второй попытке я попытался использовать ListView с помощью настраиваемого адаптера. К сожалению, этот список использовал только небольшую часть моего экрана и остальных элементов, которые были закрыты за заголовком следующей части (этот мини-список выглядел прокручиваемым, когда рядом с ним появилась вторая полоса прокрутки, но она не прокручивалась. будет считать эту прокрутку в списке прокрутки хорошим решением, но просто хотел бы упомянуть об этом).

Может ли кто-нибудь сказать мне, как я могу рассказать этот список предметов, чтобы они не были прокручиваемы и не занимали всю комнату, в которой она нуждается (знает ли он, какой размер он будет, когда создан дочерний узел?) Или помогите мне с альтернативным решением моей проблемы? (Ох, и я рассмотрел положить нечестивое количество ViewStubs внутри моего расположения, но это только кажется идиотской и очень плохая практика. Поправьте меня, если я ошибаюсь)

alt text

+0

hii, у меня что-то подобное реализовано, однако мой список дочерних элементов не является серьезным !!! Я что-то не хватает? –

ответ

1

Если я вас правильно понял, то почему бы вам просто не взять ExpandableList + Adapter, который реализует ExpandableListAdapter? Это несколько уродливый подход, но он работает и не очень хлопот.

MyAdapter реализует ExpandableListAdapter

@Override 
public View getChildView(int groupPosition, int childPosition,boolean isLastChild, View convertView, ViewGroup parent) { 

} 

В этом методе вы можете просто выяснить, если ток childPosition будет один из заголовков или один из детей и раздувать соответствующий вид из XML.

+0

Эй, у меня уже была собственная реализация ExpandableListAdapter, но ранее я просто обрабатывал каждый дочерний узел как один элемент (один элемент с 3 заголовками и 3 списками), но я думаю, что вы правы, что я должен рассматривать их как n + m + o +3 дочерние узлы (где n, m и o - размер первого, второго и третьего списков соответственно), а затем проверяют для каждого узла, какой номер они должны решить, как с ними обращаться. Однако будет сложнее повторно использовать «convertView» с этим решением. – Kasium

+1

Теперь я реализовал это решение, и оно отлично работает. – Kasium

+0

Рад помочь. ура – metter

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