listview加载不同的样式

listview以垂直形式显示所有的列表项,展示需要实现setadapter(adapter)方法,由adapter提供列表项,包括子项的布局和数据,以baseadapter为例,baseadapter易于扩展,能对各列表项最大限度定制。
以学生列表展示为例:
实体类:提供学生信息的基本get,set以及初始化方法。
baseadapter:加载子项布局并完成子布局和数据的绑定。
初始化:

    ArrayList<Teacher_Class> listString;
    ArrayList<TClassStudent> stuList;
    Context mContext;
    LayoutInflater inflater;
    int type;
    //type如果等于1,就是课表,0就是在老师端点进班级时查看的学生列表,等于2时为老师查看点到情况时加载的学生信息,以学生姓名和迟到次数展示,
    // 然后分别相应不同的点击事件,学生端课表点进去后即为不可更改的学生信息
    // ,老师端课表点击去后为学生列表,以姓名和id体现,点击去后为可修改的学生信息
    public ListAdapter(Context context, ArrayList listString,int type) {
// TODO Auto-generated constructor stub
        mContext = context;
        inflater = LayoutInflater.from(mContext);

        this.type=type;
        if (type==1)
        {
            this.listString=listString;
        }
       if (type==0||type==2)
       {
           this.stuList=listString;
       }
    }

接下来,实现该接口的所有方法:
得到该类型数量:

   @Override
    public int getCount() {
// TODO Auto-generated method stub
        if (type==1)
        {
            return listString.size();
        }
        if (type==0||type==2)
        {
            return stuList.size();
        }
        return 0;
    }
   //每个convert view都会调用此方法,获得当前所需要的view样式
    @Override
    public int getItemViewType(int position) {
// TODO Auto-generated method stub

     return type;

    }

得到总的类型数目:

    @Override
    public int getViewTypeCount() {
// TODO Auto-generated method stub
        return 3;
    }
得到数据单个实体对象:
    @Override
    public Object getItem(int arg0) {
// TODO Auto-generated method stub
        if (type==1)
        {
            return listString.get(arg0);
        }
        if (type==0||type==2)
        {
            return stuList.get(arg0);
        }
        return 0;

    }

得到子项ID

   @Override
    public long getItemId(int position) {
// TODO Auto-generated method stub
        return position;
    }

接下来,最重要的是绑定子项数据和它的视图,采用convertview进行优化,加载界面,如果有则可以通过它的getTag()方法加载缓存,如果没有,可以通过setTag(相关holder)对视图进行缓存,便于之后加载,然后设置holder的子项控件相关方法进行显示数据,如图片文字,并返回布局即可。

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
        viewHolder1 holder1 = null;
        viewHolder2 holder2=null;
        viewHolder3 holder3=null;
        int ty=getItemViewType(position);

//无convertView,需要new出各个控件
        if(convertView == null)
        {
            Log.e("convertView = ", " NULL");
                   if (ty==1)
                   {
                       convertView = inflater.inflate(R.layout.class_item, parent, false);
                       holder1 = new viewHolder1();
                       holder1.textView = (TextView)convertView.findViewById(R.id.class_item);
                       Log.d("convertView = ", "NULL TYPE_1");
                       convertView.setTag(holder1);
                   }
            if (ty==0)
            {
                convertView = inflater.inflate(R.layout.stu_item, parent, false);
                holder2 = new viewHolder2();
                holder2.name = (TextView)convertView.findViewById(R.id.name);
                holder2.id = (TextView)convertView.findViewById(R.id.id);
                Log.d("convertView = ", "NULL TYPE_2");
                convertView.setTag(holder2);
            }
            if (ty==2)
            {
                convertView = inflater.inflate(R.layout.stu_item, parent, false);
                holder3 = new viewHolder3();
                holder3.name = (TextView)convertView.findViewById(R.id.name);
                holder3.absent = (TextView)convertView.findViewById(R.id.id);
                Log.d("convertView = ", "NULL TYPE_3");
                convertView.setTag(holder3);
            }
        }
        else
        {
            if (ty==1)
            { //有convertView,按样式,取得不用的布局
                holder1 = (viewHolder1) convertView.getTag();

            }
            if (ty==0)
            { //有convertView,按样式,取得不用的布局
                holder2 = (viewHolder2) convertView.getTag();

            }
            if (ty==2)
            { //有convertView,按样式,取得不用的布局
                holder3 = (viewHolder3) convertView.getTag();

            }

        }
//设置资源
        if (ty==1)
        {
            holder1.textView.setText(listString.get(position).getClassName());
            holder1.build((Teacher_Class) getItem(position));
        }
        if (ty==0)
        {
            holder2.name.setText(stuList.get(position).getS_Name());
            holder2.id.setText(stuList.get(position).getS_Id());
            holder2.build((TClassStudent) getItem(position));
        }
        if (ty==2)
        {
            holder3.name.setText(stuList.get(position).getS_Name());
            holder3.absent.setText(Integer.toString(stuList.get(position).getS_Count()));
            holder3.build((TClassStudent) getItem(position));
        }
        return convertView;
    }

相关holder如下:定义holder子数据的类型以及响应事件。

class viewHolder1{
        TextView textView;
        Teacher_Class item=null;
        public void build(Teacher_Class teacher_class)
        {
            this.item=teacher_class;
            textView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                        Toast.makeText(mContext,"hh",Toast.LENGTH_SHORT).show();
                        //Intent intent=new Intent(mContext, StudentList.class);
                        //startActivity(intent);
                        StudentList.actionStart(mContext, item.getTClass_Id(),type);
                }
            });
        }
    }
    class viewHolder2{
        TextView name;
        TextView id;
        TClassStudent item=null;
        public void build(TClassStudent tClassStudent)
        {
            this.item=tClassStudent;
            name.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.e("click = ", "managesutdent");
                Toast.makeText(mContext, "hh", Toast.LENGTH_SHORT).show();
                //Intent intent=new Intent(mContext, StudentList.class);
                //startActivity(intent);
                OneStudent.actionStart(mContext, item);

            }
        });
            id.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Log.e("click = ", "managesutdent");
                  //  Toast.makeText(mContext, "hh", Toast.LENGTH_SHORT).show();
                   // Intent intent=new Intent(mContext, StudentList.class);
                    //startActivity(intent);
                    OneStudent.actionStart(mContext, item);

                }
            });
        }
    }
    class viewHolder3{
        TextView name;
        TextView absent;
        TClassStudent item=null;
        public void build(TClassStudent tClassStudent)
        {
            this.item=tClassStudent;
            name.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Log.e("click = ", "managesutdent");
                    Toast.makeText(mContext, "hh", Toast.LENGTH_SHORT).show();
                    //Intent intent=new Intent(mContext, StudentList.class);
                    //startActivity(intent);
                    OneStudent.actionStart(mContext, item);

                }
            });
            absent.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Log.e("click = ", "managesutdent");
                    Toast.makeText(mContext, "hh", Toast.LENGTH_SHORT).show();
                    // Intent intent=new Intent(mContext, StudentList.class);
                    //startActivity(intent);
                    OneStudent.actionStart(mContext, item);

                }
            });
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值