实现代码
Adapter的代码
其中:ViewHolder分别是三个不同的布局,也就是ListView中每一项的布局
TYPE_1…是几种类型.
在使用不同布局的时候,getItemViewType和getViewTypeCount不能少,一般的同一种item的列表是不用这两个函数的重载的,但是如果需要不同种类的item,就必须重载这两个
public class MainActivity extends ActionBarActivity {
private ListView lv;
ArrayList<String> list=new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
for (int i = 0; i < 100; i++) {
list.add("aaaaaaaaa"+i);
}
lv = (ListView) findViewById(R.id.lv);
lv.setAdapter(new MyAdapter());
}
class MyAdapter extends BaseAdapter{
final int TYPE_1=0;
final int TYPE_2=1;
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public int getItemViewType(int position) {
int p=position;
if (p%2==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 convertView, ViewGroup parent) {
// TODO Auto-generated method stub
int gt = getItemViewType(position);
ViewHolder viewHolder = null;
ViewHolder2 viewHolder2=null;
if (convertView==null) {
switch (gt) {
case TYPE_1:
viewHolder= new ViewHolder();
convertView=convertView.inflate(MainActivity.this, R.layout.aa, null);
viewHolder.tv=(TextView) convertView.findViewById(R.id.tv);
convertView.setTag(viewHolder);
break;
case TYPE_2:
viewHolder2= new ViewHolder2();
convertView=convertView.inflate(MainActivity.this, R.layout.aa2, null);
viewHolder2.tv=(TextView) convertView.findViewById(R.id.tv);
convertView.setTag(viewHolder2);
break;
default:
break;
}
}else {
switch (gt) {
case TYPE_1:
viewHolder=(ViewHolder) convertView.getTag();
break;
case TYPE_2:
viewHolder2=(ViewHolder2) convertView.getTag();
break;
default:
break;
}
}
switch (gt) {
case TYPE_1:
viewHolder.tv.setText(list.get(position));
break;
case TYPE_2:
viewHolder2.tv.setText(list.get(position));
break;
default:
break;
}
return convertView;
}
class ViewHolder{
TextView tv;
}
class ViewHolder2{
TextView tv;
}
}
}