Android ListView中添加多个item布局

Android ListView中添加多个item布局

效果

在这里插入图片描述

思路

在自定义Adapter中

  • 重写getItemViewType()方法用来判断当前Item对象的类别
  • 重写getViewTypeCount()返回item一共有几个类别
  • 在geView方法中通过判断类别来填充不同的item布局并给控件设置值

代码

MutiLayoutAdapter

package com.example.listviewtest;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.ArrayList;

public class MutiLayoutAdapter extends BaseAdapter {

    //定义两个类别标志
    private static final int TYPE_BOOK = 0;
    private static final int TYPE_APP = 1;
    private Context mContext;
    private ArrayList<Object> mData = null;

    public MutiLayoutAdapter(Context mContext, ArrayList<Object>mData){
        this.mContext = mContext;
        this.mData = mData;
    }

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

    @Override
    public Object getItem(int i) {
        return mData.get(i);
    }

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

    //判断类别
    @Override
    public int getItemViewType(int position) {
        if (mData.get(position)instanceof App){
            return TYPE_APP;
        }else if (mData.get(position)instanceof Book){
            return  TYPE_BOOK;
        }else {
            return super.getItemViewType(position);
        }
    }

    //类别数目
    @Override
    public int getViewTypeCount() {
        return 2;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        int type = getItemViewType(position);
        ViewHolder1 holder1 = null;
        ViewHolder2 holder2 = null;
        if (convertView == null){
            switch (type){
                case TYPE_APP:
                    holder1 = new ViewHolder1();
                    convertView = LayoutInflater.from(mContext).inflate(R.layout.item_one,parent,false);
                    holder1.img_icon = (ImageView)convertView.findViewById(R.id.img_icon);
                    holder1.txt_aname = (TextView)convertView.findViewById(R.id.txt_aname);
                    convertView.setTag(R.id.Tag_APP,holder1);
                    break;
                case TYPE_BOOK:
                    holder2 = new ViewHolder2();
                    convertView = LayoutInflater.from(mContext).inflate(R.layout.item_two,parent,false);
                    holder2.txt_bname = (TextView)convertView.findViewById(R.id.txt_bname);
                    holder2.txt_bauthor = (TextView)convertView.findViewById(R.id.txt_bauthor);
                    convertView.setTag(R.id.Tag_Book,holder2);
                    break;
            }
        }else {
            switch (type){
                case TYPE_APP:
                    holder1 = (ViewHolder1)convertView.getTag(R.id.Tag_APP);
                    break;
                case TYPE_BOOK:
                    holder2 =(ViewHolder2)convertView.getTag(R.id.Tag_Book);
                    break;
            }
        }
        Object obj = mData.get(position);
        //设置控件的值
        switch(type){
            case TYPE_APP:
                App app = (App)obj;
                if (app!=null){
                    holder1.img_icon.setBackgroundResource(app.getaIcon());
                    holder1.txt_aname.setText(app.getaName());
                }
                break;
            case TYPE_BOOK:
                Book book = (Book)obj;
                if (book!=null){
                    holder2.txt_bname.setText(book.getbName());
                    holder2.txt_bauthor.setText(book.getbAuthor());
                }
                break;
        }
        return convertView;
    }

    private static class ViewHolder1{
        ImageView img_icon;
        TextView txt_aname;
    }

    private static class ViewHolder2{
        TextView txt_bname;
        TextView txt_bauthor;
    }
}

完整工程下载

传送门

posted @ 2019-08-22 14:27  消灭猕猴桃  阅读(249)  评论(0编辑  收藏  举报