您的位置:首页 > 移动开发 > Android开发

Android listView 中嵌套不同的item

2015-12-02 16:13 204 查看
在listview中嵌套不同的item,就要使用不同的ItmeHolder,根据要显示的不同来保存不同的itemholder (setTag)。

Listview中有3种Item布局,即使convertView缓存了一些布局,但是在重构时,根本不知道怎么样去让convertView返回你所需要的布局,这时你需要让adapter知道我当前有哪些布局,我重构Item时的布局选取规则,好让convertView能返回你需要的布局需要重写一下两个函数


@Override

public int getItemViewType(int position) {}

根据position来返回不同的int数据,从而加载不同的缓存布局

@Override

public int getViewTypeCount() {}

返回一共有多少种缓存布局的数量。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
//三种itemHolder
viewHolder1 holder1 = null;
viewHolder2 holder2 = null;
viewHolder3 holder3 = null;

//根据位置,判断是那种itemholder
**int type = getItemViewType(position);**
//无convertView,需要new出各个控件
if(convertView == null)
{
//按当前所需的样式,确定new的布局
switch(type)
{
case TYPE_1:
convertView = inflater.inflate(R.layout.listitem1, parent, false);
holder1 = new viewHolder1();
holder1.textView = (TextView)convertView.findViewById(R.id.textview1);
holder1.checkBox = (CheckBox)convertView.findViewById(R.id.checkbox);
Log.e("convertView = ", "NULL TYPE_1");
convertView.setTag(holder1);
break;
case TYPE_2:
convertView = inflater.inflate(R.layout.listitem2, parent, false);
holder2 = new viewHolder2();
holder2.textView = (TextView)convertView.findViewById(R.id.textview2);
Log.e("convertView = ", "NULL TYPE_2");
convertView.setTag(holder2);
break;
case TYPE_3:
convertView = inflater.inflate(R.layout.listitem3, parent, false);
holder3 = new viewHolder3();
holder3.textView = (TextView)convertView.findViewById(R.id.textview3);
holder3.imageView = (ImageView)convertView.findViewById(R.id.imageview);
convertView.setTag(holder3);
break;
}
}
else
{
//有convertView,按样式,取得不用的布局
switch(type)
{
case TYPE_1:
holder1 = (viewHolder1) convertView.getTag();
break;
case TYPE_2:
holder2 = (viewHolder2) convertView.getTag();
break;
case TYPE_3:
holder3 = (viewHolder3) convertView.getTag();
break;
}
}
//根据不同的type,为各个界面设置资源
switch(type)
{
case TYPE_1:
holder1.textView.setText(Integer.toString(position));
holder1.checkBox.setChecked(true);
break;
case TYPE_2:
holder2.textView.setText(Integer.toString(position));
break;
case TYPE_3:
holder3.textView.setText(Integer.toString(position));
holder3.imageView.setBackgroundResource(R.drawable.icon);
break;
}
return convertView;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: