实现方法主要有两种:
1、所有Item使用同一个布局文件,这个布局文件中包含所有情况下需要的控件,通过在getView中判断显示类型设置不同控件的可见性。
这种方法的优点是只需要写一个布局文件,缺点是维护困难,而且getView内部的控件控制逻辑复杂,每个条目内部的控件都会有冗余,造成资源浪费。
2、使用ListAdapter提供的实现方案,每种显示类型的Item分别提供布局文件,然后通过getItemTypeCount设置Item类型数量。
这种方法的缺点是需要维护多个布局文件,但是getView处理更加方便,减少展示层内部的逻辑判断,能够有效利用所有的控件元素。ListView内部会为每一种类型的Item维护一个缓存复用队列,所以效率最高。
demo主要的代码如下:
@Override
public
View getView(
int
position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
MyItem item = (MyItem) getItem(position);
switch
(getItemViewType(position)) {
case
MyItem.ITEM:
if
(convertView ==
null
) {
convertView = inflater.inflate(R.layout.news_item,
null
|