ListView剖析 - item加载不同布局

前言

Android中的ListView,大家可能已经很熟悉了,用起来也算是得心应手。可能你见过一个ListView中展示了不同的布局,或许你会说,这种方式实现起来很简单,在item的布局文件中通过visibility来动态显示、隐藏view,即可实现这种效果。

即使是我的同事,让他实现这样的不同布局,依然采用的是以上方式,完全不知道BaseAdapter已经为我们提供了多种不同布局的item的实现方式。

声明一个继承BaseAdapter的Adapter

在子adapter中重写父类的getViewTypeCountgetItemViewType方法,顾名思义:

  • getViewTypeCount表示不同的item布局类型的数量
  • getItemViewType表示不同布局的item的类型
class TypeAdapter extends BaseAdapter {

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

    @Override
    public int getItemViewType(int position) {
        return list.get(position).getType();
    }

    @Override
    public int getViewTypeCount() {
        return 2;
    }

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

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            switch (getItemViewType(position)) {
                case 0:
                    convertView = LayoutInflater.from(MainActivity.this).inflate(R.layout.type1, null);
                    break;

                case 1:
                    convertView = LayoutInflater.from(MainActivity.this).inflate(R.layout.type2, null);
                    break;
            }
            holder = new ViewHolder();
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        return convertView;
    }
}

这样就可以在getView方法中通过不同的view type,来inflate不同的item布局,后面对不同item的数据填充,都可以利用getItemViewType进行分别设置。

效果

最终实现的效果如下:

ListView剖析 - item加载不同布局_第1张图片
最终效果

你可能感兴趣的:(ListView剖析 - item加载不同布局)