Возможно ли иметь разные дочерние представления для ExpandableListView в Android на основе значения родительского адаптера?

В приложении, над которым я работаю, я в настоящее время использую кнопку, чтобы открыть новое действие, в котором есть простое фильтруемое представление списка. Когда пользователь щелкает строку в списке, выбранное значение возвращается обратно в предыдущее действие, чтобы затем что-то с ним сделать. Это означает, что у меня есть два действия для выполнения одной функции.

Я искал способ элегантно объединить эти два вида и думаю, что расширяемый список — это то, что нужно, но я не уверен в одном: можно ли переопределить getChildView (настраиваемый расширяемый список), чтобы раздуть другое представление на основе значение в адаптере родительской группы?

Мой адаптер выбирает два значения из базы данных sqlite: целое число с именем «Тип» и строку с именем «Переместить». Я показываю только «Перемещение», но привязываю «Тип» к скрытому TextView. Если я реализую одно расширяемое представление списка, мне нужно будет каким-то образом передать «Тип» в раскрывающийся список, чтобы он мог отображать другое дочернее представление (позволяя пользователю вводить вес, время или повторения на основе значения типа «1», «2» или «3».

Возможно ли это с помощью пользовательского ELV, который переопределяет метод getchildview? Я вижу, что вы можете получить родительскую позицию и дочернюю позицию, но, кроме использования глобальной переменной при щелчке родителя, я не вижу ничего, что передается дочернему элементу, чтобы узнать значение, текст и т. д., которые были родитель?

Я также нашел хорошую реализацию здесь: https://github.com/tjerkw/Android-SlideExpandableListView

Но это кажется слишком сложным, чтобы попытаться переопределить это, поэтому я просто попробую стандартное представление расширяемого списка, если это возможно.

Спасибо!

Редактировать: вот плохой макет того, о чем я говорю. Первое падение будет иметь представление только с полем и кнопкой, второе представление может иметь поле и кнопку, но третье представление имеет два поля, одно для веса, одно для повторений, а затем кнопку.:

введите здесь описание изображения


person Evan R.    schedule 28.09.2013    source источник
comment
Ваши настройки неясны, и вы можете добавить подробности о запланированном взаимодействии. Насколько я понял, вы хотите (раздуть специальный макет для дочерних представлений (всех?) на основе параметра (типа), присутствующего в данных группы), это возможно (но путем расширения адаптера, а не сам виджет).   -  person user    schedule 28.09.2013


Ответы (1)


Способ сделать это — создать один макет представления для всех возможных типов, которые вы хотите отобразить в одном элементе ExpandableListView.

Вы просто переопределяете адаптеры getChildView и выбираете тип и перемещение в их. Затем вы устанавливаете части своего представления на View.setVisibility(View.GONE), чтобы убедиться, что отображается правильный вид представления.

person jboi    schedule 28.09.2013
comment
Я только что разместил на Fluidui.com быстрый макет того, о чем я пытаюсь рассказать. Если есть только одно поле, строки, вероятно, могут остаться прежними, но если мне нужны две или более записей (вес и время, вес и повторения и т. д.), тогда потребуется показать другой макет. Итак, если я переопределяю getchildview, я могу передать дополнительные элементы данных в конструктор (getChildView)? - person Evan R.; 29.09.2013
comment
Я понимаю что ты имеешь ввиду. Я бы создал макет для элемента, который содержит максимальную сложность, которую может иметь один элемент. В вашем случае два ящика и кнопка. Затем в getChildView() вы решаете, какая часть предмета должна быть показана (View.setVisibility(View.VISIBLE)), а какая не должна отображаться (полностью исчезла, а не только невидимая: View.setVisibility(View.GONE)) - person jboi; 29.09.2013
comment
Круто, мне придется попробовать на этой неделе, если это сработает, я приму ваш первоначальный ответ. Спасибо! - person Evan R.; 30.09.2013