android:如何为组和子使用相同的类的ExpandableListAdapter?

时间:2011-10-09 21:04:13

标签: android expandablelistadapter

我正在尝试使用android ExpandableListView小部件。我有一个类Item,它有很多关于项目的属性。我希望我的列表看起来像,组列表的元素只显示项目的名称,以及一些其他重要的属性。当我点击该项目时,它会展开并显示给定项目的所有属性。所以基本上对我来说,group和child元素是相同的,我扩展的列表总是只有一个元素。为此编写适配器的正确方法是什么。我试过类似这样的东西,但是当我想展开一个元素时,总是给我空指针expecttions。

private Context context;
private ArrayList<VCDR> groups;
private ArrayList<ArrayList<VCDR>> children;


public ExpandableAdapter(Context context, ArrayList<VCDR> groups) {
    this.context = context;
    this.groups = groups;
    this.children= new ArrayList<ArrayList<VCDR>>();
    this.children.add(groups);

}


public Object getChild(int groupPosition, int childPosition) {

    return children.get(groupPosition).get(childPosition);
}

2 个答案:

答案 0 :(得分:0)

当您将组ArrayList分配给构造函数中的子多维数组时,您正在做的事情有点奇怪。我会重新检查一下。请查看官方文档中的示例:http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/ExpandableList1.html

基本上,您将为群组标题添加一个数组(例如标题1,标题2等)。在您的子多维数组中,您希望为组数组的每个标题相应地分配属性。

文档给出了这个例子:

    private String[] groups = { "People Names", "Dog Names", "Cat Names", "Fish Names" };
    private String[][] children = {
            { "Arnold", "Barry", "Chuck", "David" },
            { "Ace", "Bandit", "Cha-Cha", "Deuce" },
            { "Fluffy", "Snuggles" },
            { "Goldy", "Bubbles" }
    };

因此,对于'People Names',你会看到子对象的0索引中包含的数组...... Arnold,Barry,Chuck等。这也很容易被重写以使用ArrayList。

答案 1 :(得分:0)

我成功了,我想做什么。我不确定这是一种正确的方式,但似乎有效。由于我要显示的所有数据都在同一个类中,因此我只使用一个ArrayList。它基本上是一个视图 - 详细的视图应用程序。该小组本身只有一个孩子。你觉得那样好吗?或者我可能会在以后的实现中遇到不一致的问题?

public ExpandableAdapter(Context context, ArrayList<VCDR> groups) {
    this.context = context;
    this.groups = groups;        
}
@Override
public Object getChild(int groupPosition, int childPosition) {

    return groups.get(groupPosition);
}

@Override
public long getChildId(int groupPosition, int childPosition) {      
    return groupPosition;
}
@Override
public int getChildrenCount(int groupPosition) {
    return 1;
}