Страница 1 из 1

работа с ExpandableListView

Добавлено: 05 май 2014, 12:39
rolotomasi
Есть такой код:

Код: Выделить всё

ExpandableListView tlHistory;
groupFrom = new String[] {"groupField", DB.COLUMN_AMOUNT};
groupTo = new int[] {R.id.tvGroupField, R.id.tvGroupAmount};
childFrom = new String[] {"entryField",DB.COLUMN_AMOUNT};
childTo = new int[] {R.id.tvEntryField, R.id.tvEntryAmount};
mAdapter = new MyAdapter(this, null, R.layout.historylist_group_item, groupFrom, groupTo, R.layout.historylist_entry_item, childFrom, childTo);
mAdapter.setViewBinder(new HistoryTreeBinder());
tlHistory.setAdapter(mAdapter); 


Т.е. при создании адаптера ему передаются 2 layout'а, один - родительский, другой - дочерний. Данные получаются из БД, имена полей в массивах. Но помимо этого в layout'ах есть TextView, текст которого нужно изменять в зависимости от настроек приложения. Этот текст не хранится в БД. К примеру в R.layout.historylist_group_item существует поле TextView tvText. Каким способом можно этот текст затолкать в этот TextView во время выполнения программы, а не на этапе проектирования представления? Заранее спасибо.

Re: работа с ExpandableListView

Добавлено: 05 май 2014, 15:26
Viewer
Чтобы получить доступ к элементам списка нужно переопределить метод getView() в вашем MyAdapter там вы можете получать доступ к вашему tvText (поищите примеры в Интернете, как правильно работать с этим методом).
Другой вариант, о котором я бы посоветовал вам задуматься - а не добавить ли в БД еще один столбец с данными? Когда работаете с БД всегда нужно отталкиваться именно от неё, ведь из неё вы получаете курсоры с данными, которые нельзя изменить, поэтому нужно позаботиться заранее, чтобы курсор при запросе получал весь набор необходимых данных, чтобы не вставлять потом лишние костыли в код и не иметь лишнюю головную боль.

ЗЫ можно еще как-то схитрить, к примеру добавить при инициализации адаптера этот tvText, но спроецировать его на любое (но существующее) поле курсора. А в биндере его отлавливать и не обращая внимание на данные из курсора устанавливать в него нужный текст (который у вас хранится в настройках).

[syntax=java]
groupFrom = new String[] {"groupField", DB.COLUMN_AMOUNT, DB.COLUMN_AMOUNT};
groupTo = new int[] {R.id.tvGroupField, R.id.tvGroupAmount, R.id.tvText};
[/syntax]

А в переопределенном ViewBinder() адаптера:
...
if (arg0.getId()==R.id.tvText) {
((TextView)arg0).setText ("Ваш текст");
}

Re: работа с ExpandableListView

Добавлено: 05 май 2014, 17:27
rolotomasi
большое спасибо за ответ! у меня получилось сделать то, что хотел через переопределение getChildView, getGroupView адаптера.