最为项目中最常使用的控件,不可避免的会遇到问题,今天写项目时遇到需要去根据不同的条件判断去加载不同的布局:
首先在XML,定义一个listView的控件和两个不同的布局,任意都可以,这里写出最主要的代码:
<span style="font-size:14px;">public final class ViewHolder {
public ImageView im;
public TextView tv0, tv_title;
public int position;
public String id;
}
public class ViewHolder2{
public TextView tv1, tv2, tv3, tvadd;
public ImageView im1;
}</span>
这是两个ViewHolder为类,我这里需要加载两个不同的布局,所以写两个就可以了,下面的都是以两个为例:
在Adapter中:
<span style="font-size:14px;">class ZXAdapter extends BaseAdapter {
private Context context;
private LayoutInflater inflater;
final int TYPE_1 = 0;
final int TYPE_2 = 1;
public ZXAdapter(Context context) {
this.context = context;
inflater = LayoutInflater.from(context);
allList = new ArrayList<ZXData>();
}
public void addzxlist(List<ZXData> datas) {
allList = datas;
}
public void BindData(List<ZXData> datas) {
allList.addAll(datas);
}
public void clear() {
if (allList != null) {
allList.clear();
}
}
@Override
public int getCount() {
return allList.size();
}
@Override
public Object getItem(int position) {
return allList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getItemViewType(int position) {
System.out.println("p1------+++>>>"+position);
int p=position;
if(p==0){
return TYPE_1;
}else {
return TYPE_2;
}
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
ViewHolder2 holder2 = null;
int type=getItemViewType(position);
if (convertView == null) {
switch (type) {
case TYPE_1:
holder = new ViewHolder();
convertView = inflater.inflate(
R.layout.fragment_homeheart2, parent, false);
holder.im = (ImageView) convertView
.findViewById(R.id.home_pager);
holder.tv_title = (TextView) convertView
.findViewById(R.id.tv_title);
convertView.setTag(holder);
break;
case TYPE_2:
holder2 = new ViewHolder2();
convertView = inflater.inflate(R.layout.item_home, parent,false);
holder2.im1 = (ImageView) convertView
.findViewById(R.id.item_zxim1);
holder2.tv1 = (TextView) convertView
.findViewById(R.id.item_zxtv1);
holder2.tv2 = (TextView) convertView
.findViewById(R.id.item_zxtv2);
holder2.tv3 = (TextView) convertView
.findViewById(R.id.item_zxtv3);
holder2.tvadd = (TextView) convertView
.findViewById(R.id.item_zxtvadd);
convertView.setTag(holder2);
break;
}
}else {
switch (type) {
case TYPE_1:
holder = (ViewHolder) convertView.getTag();
break;
case TYPE_2:
holder2 = (ViewHolder2) convertView.getTag();
break;
}
}
//设置资源
switch (type) {
case TYPE_1:
holder.tv_title.setText(allList.get(0).getTitle());
DownLoadImage.downLoadImage(getActivity(), holder.im, "http://"
+ allList.get(position).getImageurl(), queue,
imageCache);
break;
case TYPE_2:
holder2.tv1.setText(allList.get(position).getTitle());
holder2.tv2.setText(allList.get(position).getNumber());
holder2.tv3.setText(allList.get(position).getHits());
holder2.tvadd.setText(allList.get(position).getSubtitle());
String string = "http://" + allList.get(position).getImageurl();
if (string == null || string.equals("")) {
holder2.im1.setImageResource(R.drawable.allshare);
} else {
DownLoadImage.downLoadImage(getActivity(), holder2.im1,
string, queue, imageCache);
}
break;
}
return convertView;
}
}</span>
其实就是对
<span style="font-size:14px;">getItemViewType()和</span><pre name="code" class="java"><span style="font-size:14px;">getViewTypeCount()方法的使用!</span>