Как обрабатывать несколько типов объектов в одном массиве для адаптера просмотра списка Android? - PullRequest
0 голосов
/ 12 апреля 2011

Я строю ListView в Android.У меня есть 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 разных списков, которые будут отображаться с использованием одного и того же списка.причина использования только одного списка - прокрутка.Я не хочу 5 разных свитков.

Мне нужно визуализировать object1Array, и когда я достигну конца этого списка, я бы хотел добавить Object2Array и так далее.

Я имею в виду решение, которое у меня сейчас есть, - обернуть типы объектов общим и создать один список объектов-оболочек, а в методе getView, основанном на типе объектов внутри обертки, соответствующим образом отобразить данные.

Я хотел бы знать, есть ли лучший способ сделать это ...

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 01 мая 2011
    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
                    }
                 ....
0 голосов
/ 12 апреля 2011

Вы можете создать класс, содержащий эти 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>();
}
...