您的位置:首页 > 其它

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

2016-03-09 17:18 405 查看
最近有需求需要在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;

}

最终实现了加载不同的布局文件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: