如何在一个数组中为android listview适配器处理多个对象TYPES?

时间:2011-04-11 23:01:28

标签: android listview arraylist listactivity listadapter

我在android中构建ListView。我有5个不同的列表。

MyListAdapter extends BaseAdapter{

        ArrayList object1Array<Object1> = new ArrayList<Object1>();
        ArrayList object2Array<Object2> = new ArrayList<Object2>();
        ArrayList object3Array<Object3> = new ArrayList<Object3>();
        ArrayList object4Array<Object4> = new ArrayList<Object4>();
        ArrayList object5Array<Object5> = new ArrayList<Object5>();


        public View getView(int position, View convertView, ViewGroup parent)
        {
                if (convertView == null) {
                   .... inflate my layout xml
                }
             ....

我已按上述方式构建了适配器。在这种情况下,我有5个不同的列表,而不是一个单独的数据集,使用相同的列表视图进行渲染。仅使用1个列表视图的原因是滚动。我不想要5个不同的卷轴。

我需要渲染object1Array,当我到达此列表的末尾时,我想追加Object2Array等等。

我现在手头上的解决方案是用公共包装对象类型并创建一个包装对象列表,并在getView方法中根据包装器内的对象类型相应地呈现数据。

我想知道我有更好的方法来做到这一点......

提前致谢。

2 个答案:

答案 0 :(得分:-1)

您可以创建课程 包含这5个列表

Class ListHolder{
        ArrayList object1Array<Object1> = new ArrayList<Object1>();
        ArrayList object2Array<Object2> = new ArrayList<Object2>();
        ArrayList object3Array<Object3> = new ArrayList<Object3>();
        ArrayList object4Array<Object4> = new ArrayList<Object4>();
        ArrayList object5Array<Object5> = new ArrayList<Object5>();
}

现在列出ListHolder类

MyListAdapter extends BaseAdapter{
 ArrayList object1Array<ListHolder> = new ArrayList<ListHolder>();
}

答案 1 :(得分:-3)

    public static enum ObjectArrayTypeEnum{
            ObjectType1, ObjectType2, ObjectType3, ObjectType4, ObjectType5;
    }

    MyListAdapter<k extends ObjectArrayTypeEnum<k>> extends BaseAdapter{

            ArrayList myArray<k extends ObjectArrayTypeEnum<k>> = 
                                 new ArrayList<k extends ObjectArrayTypeEnum<k>>();

            myArray.addAll(Arraylist that contains Object1 elements)
            myArray.addAll(Arraylist that contains Object2 elements)
            myArray.addAll(Arraylist that contains Object3 elements)
            myArray.addAll(Arraylist that contains Object4 elements)
            myArray.addAll(Arraylist that contains Object5 elements)
       //This way I can restrict my adapter's dataset to contain only objects of type
       // which I wanted.


            public View getView(int position, View convertView, ViewGroup parent)
            {
                    if (convertView == null) {
                       .... inflate my layout xml
                    }
                 ....