您的位置:首页 > 其它

关于listview多条目显示item的方法

2017-07-21 15:36 218 查看
至于布局文件我就不写了,listview每一个不同item对应一个item的布局另外还有一个总listview布局
public class MainActivity
extends AppCompatActivity {
//设置四种类型,对应我三周不同类型的item,数字随意生成,主要是为了区分;
private static final int
FristTupe
= 0;
private static final int
TwoType
= 1;
private static final int
ThreeType
= 2;
private static final int
ForType=3;
private List<BaseAdap>
list;
private ListView
listview;

//设置数据

    private String[]
texts = {"玉皇",
"王母",
"嫦娥",
"八戒",
"如来",
"悟空",
"XY",
"xx", "gg",
"pp"};
private int[]
image1 = {R.drawable.ic_io, R.drawable.ic_01, R.drawable.ic_02,
R.drawable.ic_03, R.drawable.ic_04, R.drawable.ic_05,
R.drawable.ic_015, R.drawable.ic_018, R.drawable.ig_001,
R.drawable.ig_002};
private int[]
image2 = {R.drawable.ig_001, R.drawable.ig_002, R.drawable.ig_007,
R.drawable.ic_018, R.drawable.ic_015,R.drawable.ic_05,R.drawable.ic_04,
R.drawable.ic_01, R.drawable.ic_04, R.drawable.ic_02};
@Override
protected void
onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

initData();
listview = (ListView) findViewById(R.id.listview);
listview.setAdapter(new
MyApdapter());

}

private void initData() {
list =
new ArrayList<BaseAdap>();
for (int
x = 0; x <
10; x++) {

BaseAdap data = new BaseAdap();
//第一种类型的数据,也就是4等等j,去展示一个类型
if
(x % 4 ==
0) {

data.setType(ForType);

data.setImages(image1[x]);

data.setImages2(image2[x]);

}//第二种类型的数据,也就是2等等j,去展示一个类型

else if (x %
2 == 0) {

data.setType(FristTupe);

data.setText(texts[x]);

System.out.println(texts[x] + x);

}//第三种类型的数据
else if
(x % 3 ==
0) {

data.setType(TwoType);

data.setText(texts[x]);

data.setImages(image1[x]);

}//第四种类型的数据
else
{

data.setType(ThreeType);

data.setText(texts[x]);

data.setImages(image1[x]);

System.out.println(texts[x] + x);

}
list.add(data);

}

}

//ListView多条目的Adapter,他比我们普通写的Adapter多了两个方法
private class
MyApdapter extends
BaseAdapter {
class ViewHolder1 {

TextView tv1;

}

class ViewHolder2 {

TextView tv2;

ImageView iv2;

}

class ViewHolder3 {

TextView tv3;

ImageView iv3;

}
class ViewHolder4 {

ImageView iv4,tv4;

}

@Override
public int
getCount() {
return list.size();

}

//返回ListView所加载Item的类型
@Override
public int
getItemViewType(int
position) {
//得到databean里面的类型数据
return
list.get(position).getType();

}

//你的ListView有几种类型的Item,我们Demo一共有四种不同的类型
@Override
public int
getViewTypeCount() {
return 4;

}

/*
1、创建ViewHodler
2、复用参数
3、查找控件
4、给控件设置数据
*/
@Override
public
View getView(int
position, View convertView, ViewGroup viewGroup) {

ViewHolder1 holder1 = null;

ViewHolder2 holder2 = null;

ViewHolder3 holder3 = null;

ViewHolder4 holder4 = null;
//拿到ListView当前Item所对应的DataBean数据的Type数据
int
type = getItemViewType(position);
//存入
if
(convertView == null) {
//更加类型创建ViewHolder
switch
(type) {
case FristTupe:

holder1 = new ViewHolder1();

convertView = View.inflate(MainActivity.this, R.layout.item,
null);

holder1.tv1 = (TextView) convertView.findViewById(R.id.textView);

convertView.setTag(holder1);
break;
case TwoType:

holder2 = new ViewHolder2();

convertView = View.inflate(MainActivity.this, R.layout.item2,
null);

holder2.tv2 = (TextView) convertView.findViewById(R.id.textView2);

holder2.iv2 = (ImageView) convertView.findViewById(R.id.imageView);

convertView.setTag(holder2);
break;
case ThreeType:

holder3 = new ViewHolder3();

convertView = View.inflate(MainActivity.this, R.layout.item3,
null);

holder3.tv3 = (TextView) convertView.findViewById(R.id.textView3);

holder3.iv3 = (ImageView) convertView.findViewById(R.id.imageView2);

convertView.setTag(holder3);
break;
case ForType:

holder4 = new ViewHolder4();

convertView = View.inflate(MainActivity.this, R.layout.item4,
null);

holder4.tv4 = (ImageView) convertView.findViewById(R.id.imageView3);

holder4.iv4 = (ImageView) convertView.findViewById(R.id.imageView4);

convertView.setTag(holder4);
break;

}
//取东西
}
else {
switch (type) {
case FristTupe:

holder1 = (ViewHolder1) convertView.getTag();
break;
case TwoType:

holder2 = (ViewHolder2) convertView.getTag();
break;
case ThreeType:

holder3 = (ViewHolder3) convertView.getTag();
break;
case ForType:

holder4 = (ViewHolder4) convertView.getTag();
break;

}

}
//设置数据
switch
(type) {
case FristTupe:

BaseAdap 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;
case ForType:

holder4.tv4.setImageResource(list.get(position).getImages2());

holder4.iv4.setImageResource(list.get(position).getImages());
break;

}
return convertView;

}
@Override
public
Object getItem(int
i) {
return null;

}
@Override
public long
getItemId(int i) {
return 0;

}

}

}

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

public class BaseAdap {
//设置类型
private int type;
//文本数据
private String text;
//图片数据
private int images;
private int images2;

public int getImages2() {
return images2;
}

public void setImages2(int images2) {
this.images2 = images2;
}

public int getType() {
return type;
}

public void setType(int type) {
this.type = type;
}

public String getText() {
return text;
}

public void setText(String text) {
this.text = text;
}

public int getImages() {
return images;
}

public void setImages(int images) {
this.images = images;
}



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐