Обзор:
- У меня есть расширяемый список, в котором отображаются элементы типа
ToDoElement
. - Каждый элемент
ToDoElement
имеет одну строкудля элемента группы и 1-3 строки для дочерних элементов - Мой пользовательский адаптер списка
expListAdapter
получает информацию о групповых и дочерних элементах с помощью методов createGroupList()
и createChildList()
. - В методе
createChildList()
я проверяю, сколько строк для дочерних элементов содержится в ToDoElement
, и создаю дочерние элементы для адаптера. - В конце я могу отсортироватьМой список, сравнивая строки для групповых элементов.
Все это прекрасно работает, но вот моя Проблема:
- Послеэлементы в представлении списка отсортированы правильно, количество дочерних элементов неверно.
- Это потому, что мой адаптер списка не знает, что количество дочерних элементов изменилось.Поэтому некоторые дочерние элементы не отображаются, а другие дочерние элементы просто пусты, потому что для них нет данных.
My Предложение:
Я знаю, что каким-то образом методы createGroupList()
и createChildList()
должны вызываться снова из моего адаптера, но я не знаю, как это сделать.
Я пытался expListAdapter.notifyDataSetInvalidated()
, потому что кто-то сказал мне, что этот метод будет вызывать createGroupList()
и createChildList()
снова, но это не работает.
Фрагменты кода:
Определение моего адаптера списка:
expListAdapter = new MyListAdapter(this, createGroupList(), createGroupList());
setListAdapter( expListAdapter );
createGroupList () и createChildList ():
private List createGroupList() {
ArrayList result = new ArrayList();
for (int i=0; i < Liste.AnzahlElemente(); i++) { //
result.add(Liste.getSize(i).getGroupString());
}
return result;
}
private List createChildList() {
ArrayList result = new ArrayList();
for(int i=0; i < Liste.getSize(); i++) {
ArrayList secList = new ArrayList();
for( int n = 1 ; n <= 3 ; n++ ) {
if (Liste.getElement(i).getChildString(n).length() != 0){
secList.add( "- " + Liste.getElement(i).getChildString(n));
}
}
result.add( secList );
}
return result;
}
Сортировка списка:
(Liste
ToDoListe
объект, который управляет ToDoElement
s в списке массивов
Collections.sort(Liste.getListe(), new NameComparator());
expListAdapter.notifyDataSetInvalidated();
//expListAdapter.notifyDataSetChanged(); //same effect as notifyDataSetInvalided
my NameComparator:
public class NameComparator implements Comparator<ToDoElement>{
public int compare(ToDoElement item1, ToDoElement item2) {
return item1.getGroupString().compareTo(item2.getGroupString());
}
}
Большое спасибо за вашу помощь!!