关于listView多条目的使用
一.多条目与listview进行对比
- 其实多条目listview和listview的使用有很多相似处,但是也有不同的地方
- 相同点:同样(找到控件设置数据再设置BaseAdapter适配器然后赋值开启适配器)
- 不通点:多条目需要在适配器里边多写两个方法
还有实例化控件的时候是多种布局
二.编程思想 - 在布局里边添加listview控件
- 找到控件
- 设置数据并开启写出BaseAdapter适配器
- 在适配器里边多实现两个方法
- 然后再设置多个条目区分(在这里注意一点:有几种条目类型就设置几种)
- 在引用多种布局和里边的控件进行赋值
- 最后开启适配器就可以了
三.代码的实现
找到控件并提成全局变量
lv = findViewById(R.id.listview);
适配器
class MyBase extends BaseAdapter{
//设置两种不同的条目区
private static final int OneType = 0;
private static final int TwoType = 1;
//设置条目类型
@Override
public int getItemViewType(int position) {
return (int) list.get(position).getGroup_id();
}
//设置使用布局的数量
@Override
public int getViewTypeCount() {
return 2;
}
private List<Bean.DataBean.PcFeedFocusBean> list;
//传数据
public MyBase(List<Bean.DataBean.PcFeedFocusBean> list) {
this.list = list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int i) {
return list.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
//注意一下只能用本id下的text
long id = list.get(i).getGroup_id();
//判断数据如果是基数就使用第一种条目类型
if(id % 2 == OneType){
MyOneView omv;
if(view == null){
omv = new MyOneView();
view = View.inflate(MainActivity.this, R.layout.show_item_one, null);
omv.item_one_text = view.findViewById(R.id.item_one_text);
omv.item_one_img = view.findViewById(R.id.item_one_img);
view.setTag(omv);
}else{
omv = (MyOneView) view.getTag();
}
//进行赋值
omv.item_one_text.setText(list.get(i).getTitle()+"");
}else if(id % 2 == TwoType){ //如果是偶数就使用第二种条目类型
MyTwoView tmv;
if(view == null){
tmv = new MyTwoView();
view = View.inflate(MainActivity.this, R.layout.show_item_two, null);
tmv.item_two_text = view.findViewById(R.id.item_two_text);
tmv.item_two_img = view.findViewById(R.id.item_two_img);
view.setTag(tmv);
}else{
tmv = (MyTwoView) view.getTag();
}
//赋值
tmv.item_two_text.setText(list.get(i).getTitle()+"");
}
//返回view
return view;
}
//第一种布局实例化控件
class MyOneView{
public TextView item_one_text;
public ImageView item_one_img;
}
//第二种布局实例化控件
class MyTwoView{
public TextView item_two_text;
public ImageView item_two_img;
}
}
开启适配器
//拿到数据
List<Bean.DataBean.PcFeedFocusBean> list = bean.getData().getPc_feed_focus();
//在这里将数据传入到适配器以便于赋值
MyBase base = new MyBase(list);
lv.setAdapter(base);