ListView with multiple types of row layout - BaseAdapter is not working properly in Android

核能气质少年 提交于 2019-12-08 19:10:58

问题


Hi below is my class for baseadapter, but it is not working properly:

private static class MyBaseAdapter extends BaseAdapter {

        private Context context;

        private LayoutInflater inflater;


        private MyBaseAdapter(Context context, FlipViewController controller) {
            inflater = LayoutInflater.from(context);
            this.context = context;

        }

        @Override
        public int getCount() {
            return Globals.list_album.size();
        }

        @Override
        public Object getItem(int position) {
            return position;
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View layout = convertView;
            if (convertView == null )
            {
                if (Globals.list_album.get(position).no_of_images == 1) {
                    layout = inflater.inflate(R.layout.single_image_adapter, null);
                }
                else if(Globals.list_album.get(position).no_of_images == 2) {
                    layout = inflater.inflate(R.layout.two_image_adapter, null);
                }
                else if(Globals.list_album.get(position).no_of_images == 3) {
                    layout = inflater.inflate(R.layout.three_image_adapter, null);
                }
                else if(Globals.list_album.get(position).no_of_images == 4) {
                    layout = inflater.inflate(R.layout.four_image_adapter, null);
                }
                else if(Globals.list_album.get(position).no_of_images == 5) {
                    layout = inflater.inflate(R.layout.five_image_adapter, null);
                }   
            }

            return layout;
        }

    }

I want to load the layout according to the no of images in Globals.list_album to each position. But it is not working properly. It does not work for no_of_images = 5 and 2 as I have such values in list. Currently my values for no_of_images are 4,3,1,2 and 5. So it should display the layouts four_image_adapter, three_image_adapter, one_image_adapter, two_image_adapter and five_image_adapter. But it displays four_image_adapter, three_image_adapter, one_image_adapter, four_image_adapter and three_image_adapter. All layouts have imageviews according to number of images. Will anybody please tell me what I have to do?


回答1:


Since you need different layout for different rows, use below methods

getViewTypeCount() - returns information how many types of rows.

getItemViewType(int position) - returns information which layout type you should use based on position

using getItemViewType you can define the layout you need to use.

Like this

public static final int TYPE_1 = 1;
public static final int TYPE_2 = 2;

public int getItemTypeCount(){
     return 5;
}

public int getItemType(int position){
    // Your if else code and return type ( TYPE_1 to TYPE_5 )
}

public View getView(int position, View convertView, ViewGroup parent){
    // Return the right kind of view based on getItemType(position)

    int type = getItemType(position);
    if(type == TYPE_1){
        // create (or reuse) TYPE_1 view
    } else if() {
    }......

    return myView;

}

Samples

http://android.amberfog.com/?p=296

http://www.survivingwithandroid.com/2014/08/android-listview-with-multiple-row.html



来源:https://stackoverflow.com/questions/25742341/listview-with-multiple-types-of-row-layout-baseadapter-is-not-working-properly

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!