【问题标题】:How to handle multiple object TYPES within one array for android listview adapter?如何在一个数组中为 android listview 适配器处理多个对象类型?
【发布时间】:2011-08-03 11:14:09
【问题描述】:

我在 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 方法中根据包装内的对象类型相应地呈现数据。

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

提前致谢。

【问题讨论】:

    标签: android listview arraylist listactivity listadapter


    【解决方案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>();
    }
    

    【讨论】:

    • 这没有意义...因为我只有 5 个不同的数组列表...根据您的实现,将有 n*5 个列表...
    【解决方案2】:
        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
                        }
                     ....
    

    【讨论】:

    • 这与使用通用对象的ArrayList 相比如何。如果您检查了通用对象是否是特定类的实例,那么您可以在那时膨胀适当的视图。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-08
    • 1970-01-01
    • 1970-01-01
    • 2015-10-08
    • 2012-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多