1.创建一个新的布局(需要几种布局创建几种)
2.新建一个类型的Type
3.initData();里重新去做一个判断,数据添加类型时,添加一个fourType属性
4.在适配器中把getViewTypeCount()里的数据添加一条即可
5.再创建一个ViewHolder
6.在getView方法里,在复制switch里的一个case,全部在增加一个即可
//设置三种类型,对应不同的类型的item
private static final int FirstType=0;
private static final int TwoType=1;
private static final int ThreeType=2;
private ListView listView;
private List<封装数据的类名> list;
String[] texts={"啊啊啊","嗷嗷嗷","哎哎哎","本宝宝","哟哟哟","啊啊啊"};
private int[] images = {R.drawable.jx_left_listitem_1, R.drawable.jx_left_listitem_5,
R.drawable.jx_left_listitem_2, R.drawable.jx_left_listitem_3,
R.drawable.jx_left_listitem_4, R.drawable.jx_left_listitem_5,
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//查找控件
listView=findViewById(R.id.listview);
//初始化数据
initData();
//设置适配器
MyAdapter myAdapter=new MyAdapter();
listView.setAdapter(myAdapter);
}
/**
* ListVIew多条目的Adapter,比普通的Adapter多了两个方法
*/
public class MyAdapter extends BaseAdapter {
class ViewHolder1{
TextView tv1;
}
class ViewHolder2{
TextView tv2;
ImageView iv2;
}
class ViewHolder3{
TextView tv3;
ImageView iv3;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder1 holder1 = null;
ViewHolder2 holder2 = null;
ViewHolder3 holder3 = null;
//拿到ListVIew当前Item所对应数据的Type数据
int type=getItemViewType(position);
//存
if (convertView==null){
//根据类型创建viewholder
switch (type){
case FirstType:
holder1=new ViewHolder1();
convertView=View.inflate(MainActivity.this,R.layout.first_item,null);
holder1.tv1=convertView.findViewById(R.id.first_tv);
convertView.setTag(holder1);
break;
case TwoType:
holder2=new ViewHolder2();
convertView=View.inflate(MainActivity.this,R.layout.two_item,null);
holder2.tv2=convertView.findViewById(R.id.two_tv);
holder2.iv2=convertView.findViewById(R.id.two_ivv);
convertView.setTag(holder2);
break;
case ThreeType:
holder3=new ViewHolder3();
convertView=View.inflate(MainActivity.this,R.layout.three_item,null);
holder3.tv3=convertView.findViewById(R.id.three_tv);
holder3.iv3=convertView.findViewById(R.id.three_iv);
convertView.setTag(holder3);
break;
}//取
}else{
switch (type){
case FirstType:
holder1= (ViewHolder1) convertView.getTag();
break;
case TwoType:
holder2 = (ViewHolder2) convertView.getTag();
break;
case ThreeType:
holder3 = (ViewHolder3) convertView.getTag();
break;
}
}
//设置数据类型
switch (type) {
case FirstType:
DataBean dataBean = list.get(position);
String text = dataBean.getText();
holder1.tv1.setText(text);
break;
case TwoType:
holder2.tv2.setText(list.get(position).getText());
holder2.iv2.setImageResource(list.get(position).getImages());
break;
case ThreeType:
holder3.tv3.setText(list.get(position).getText());
holder3.iv3.setImageResource(list.get(position).getImages());
break;
}
return convertView;
}
//返回listview所加载item的类型
@Override
public int getItemViewType(int position) {
return list.get(position).getType();
}
@Override
public int getViewTypeCount() {
return 10;
}
}
/**
* 这里是因为没有多条目的类型,手动我分一下,分为三种类型
*/
private void initData() {
list=new ArrayList<DataBean>();
for (int x = 0; x < 10; x++) {
DataBean data = new DataBean();
//第一种类型的数据
if (x % 2 == 0) {
data.setType(FirstType);
data.setText(texts[x]);
//Log.d("位置" + x + "里面的数据" + data.toString());
}//第二种类型的数据
else if (x % 3 == 0) {
data.setType(TwoType);
data.setText(texts[x]);
data.setImages(images[x]);
}//第三种类型的数据
else {
data.setType(ThreeType);
data.setText(texts[x]);
data.setImages(images[x]);
}
list.add(data);
}
}