关于在listView中加载不同的条目

最近有需求需要在listView中载入不同的listItem布局,原本以为只需要在getView中对position进行判断然后加载不同的布局文件就行了,但是在运行的时候就出现了布局混乱的现象,后来从别人那里看到,关于使用convertView的解释,convertView对于只有一种布局的时候会节省很多的内存,但是在加载不同的布局的时候就会出现布局的会乱。

那么怎么去解决这个问题呢?我们在继承BaseAdapter的适配器中去重写了两个方法,分别是getViewTypeCount()和getItemViewType(int position),从他们的翻译理解就是获取不同类型的布局。代码如下:

public class ListAdapter extends BaseAdapter {


private List<String> lists;
private LayoutInflater inflater;
final int VIEW_TYPE = 2;
final int TYPE_1 = 0;
final int TYPE_2 = 1;


public ListAdapter(List<String> lists, Context context) {
this.lists = lists;
inflater = LayoutInflater.from(context);
}

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


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

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

@Override
public int getItemViewType(int position) {
if (position == 0) {
return TYPE_1;
} else {
return TYPE_2;
}
}

@Override
public int getViewTypeCount() {
// TODO Auto-generated method stub
return 2;
}

@Override
public View getView(int position, View view, ViewGroup parent) {
ViewHolder holder1 = null;
ViewHolder holder2 = null;
int type = getItemViewType(position);
if (view == null) {
if (type == 0) {
view = inflater.inflate(R.layout.list_header, null); // 获取条目的view对象
holder1 = new ViewHolder();
holder1.image = (ImageView) view.findViewById(R.id.iv_list);
holder1.textView = (TextView) view.findViewById(R.id.iv_item);
view.setTag(holder1);
} else {
view = inflater.inflate(R.layout.list_item, null); // 获取条目的view对象
holder2 = new ViewHolder();
holder2.image = (ImageView) view.findViewById(R.id.iv_list);
holder2.textView = (TextView) view.findViewById(R.id.iv_item);
view.setTag(holder2);
}
} else {
if (type == 0) {
holder1 = (ViewHolder) view.getTag();
} else {
holder2 = (ViewHolder) view.getTag();
}
}
if (type == 0) {
holder1.textView.setText(lists.get(position));
String url = "http://dl.image.so.com/d?imgurl=http%3A%2F%2Favatar.csdn.net%2F1%2FB%2F8%2F1_vict_t.jpg&purl=http%3A%2F%2Fbbs.csdn.net%2Ftopics%2F391072086%3Fpage%3D1&key=cbbf9ac856";
MyApplication.getImagerLoaderInstance().displayImage(url,
holder1.image, MyApplication.getDisplayImageOptions());
} else {
holder2.textView.setText(lists.get(position));
String url = "http://dl.image.so.com/d?imgurl=http%3A%2F%2Favatar.csdn.net%2F1%2FB%2F8%2F1_vict_t.jpg&purl=http%3A%2F%2Fbbs.csdn.net%2Ftopics%2F391072086%3Fpage%3D1&key=cbbf9ac856";
MyApplication.getImagerLoaderInstance().displayImage(url,
holder2.image, MyApplication.getDisplayImageOptions());
}
return view;
}


public final class ViewHolder {
public ImageView image;
private TextView textView;
}

最终实现了加载不同的布局文件。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值