概述:
ToDoElement
类型的项目。ToDoElement
项目都有一个字符串用于Group-Element,1-3个字符串用于子元素expListAdapter
使用方法createGroupList()
和createChildList()
获取有关group-and item-items的信息。createChildList()
中,我检查ToDoElement
中子项的字符串数,并为适配器创建子项。所有这一切都很好,但这是我的问题:
我的建议:
我知道必须以某种方式从我的适配器再次调用方法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
Collections.sort(Liste.getListe(), new NameComparator());
expListAdapter.notifyDataSetInvalidated();
//expListAdapter.notifyDataSetChanged(); //same effect as notifyDataSetInvalided
我的NameComparator:
public class NameComparator implements Comparator<ToDoElement>{
public int compare(ToDoElement item1, ToDoElement item2) {
return item1.getGroupString().compareTo(item2.getGroupString());
}
}
非常感谢你的帮助!!
答案 0 :(得分:2)
我解决了自己的问题!
我为自定义列表适配器编写了一个Update方法。
看起来像这样:
public class MyListAdapter extends BaseExpandableListAdapter{
private ArrayList<String> ueberschriften;
private ArrayList<ArrayList<String>> stichpunkte;
public MyListAdapter(Context context, List _ueberschriften, List _stichpunkte) {
this.ueberschriften = (ArrayList)_ueberschriften;
this.stichpunkte = (ArrayList)_stichpunkte;
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
// [...] some other methods
public void update(List _GroupStrings, List _ChildStrings) {
GroupStrings = (ArrayList<String>) _GroupStrings;
ChildStrings = (ArrayList<ArrayList<String>>) _ChildStrings;
}
}
在我的活动中对列表进行排序如下所示:
Collections.sort(Liste.getListe(), new NameComparator());
expListAdapter.update(createGroupList(), createChildList());
expListAdapter.notifyDataSetChanged();
现在子项的数量也正确更新!
干杯!
答案 1 :(得分:0)
适配器中的列表和显示的列表是单独的列表。
如果适配器填充了新数据或重新安排了数据,则需要通过 notifyDataSetChanged()通知视图 - 这将触发重新绘制视图。
只有在您的数据不再可用时才应调用notifyDataSetInvalidate()。
如下所述: Android ListView Adapter notifyDataSetInvalidated() vs notifyDataSetChanged()