zoukankan      html  css  js  c++  java
  • 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;
        }
    }
    

    完整工程下载

    传送门

  • 相关阅读:
    周总结3
    周总结6
    Java时间日期格式转换
    [专贴]在使用了母版页的内容页后,如何在javascript中调用服务器控件值
    用到函数的题目
    javascript解析dom(2)
    javascript解析dom
    自己的分页
    javascript解析DOM(3)
    转载 ajax XML dataset
  • 原文地址:https://www.cnblogs.com/PythonFCG/p/13860157.html
Copyright © 2011-2022 走看看