listview和recyclerview多布局

转载 2016年08月31日 14:04:12

1.listview:

class MyAdapter extends BaseAdapter{
    Context mContext;
    LinearLayout linearLayout = null;
    LayoutInflater inflater;
    TextView tex;
    final int VIEW_TYPE = 3;
    final int TYPE_1 = 0;
    final int TYPE_2 = 1;
    final int TYPE_3 = 2;

    public MyAdapter(Context context) {
      // TODO Auto-generated constructor stub
      mContext = context;
      inflater = LayoutInflater.from(mContext);
    }

    @Override
    public int getCount() {
      // TODO Auto-generated method stub
      return listString.size();
    }

    //每个convert view都会调用此方法,获得当前所需要的view样式
    @Override
    public int getItemViewType(int position) {
      // TODO Auto-generated method stub
      int p = position%6;
      if(p == 0)
        return TYPE_1;
      else if(p < 3)
        return TYPE_2;
      else if(p < 6)
        return TYPE_3;
      else
        return TYPE_1;
    }

    @Override
    public int getViewTypeCount() {
      // TODO Auto-generated method stub
      return 3;
    }

    @Override
    public Object getItem(int arg0) {
      // TODO Auto-generated method stub
      return listString.get(arg0);
    }

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

    @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 type = getItemViewType(position);

      //无convertView,需要new出各个控件
      if(convertView == null)
      { 
        Log.e("convertView = ", " NULL");

        //按当前所需的样式,确定new的布局
        switch(type)
        {
        case TYPE_1:
          convertView = inflater.inflate(R.layout.listitem1, parent, false);
          holder1 = new viewHolder1();
          holder1.textView = (TextView)convertView.findViewById(R.id.textview1);
          holder1.checkBox = (CheckBox)convertView.findViewById(R.id.checkbox);
          Log.e("convertView = ", "NULL TYPE_1");
          convertView.setTag(holder1);
          break;
        case TYPE_2:
          convertView = inflater.inflate(R.layout.listitem2, parent, false);
          holder2 = new viewHolder2();
          holder2.textView = (TextView)convertView.findViewById(R.id.textview2);
          Log.e("convertView = ", "NULL TYPE_2");
          convertView.setTag(holder2);
          break;
        case TYPE_3:
          convertView = inflater.inflate(R.layout.listitem3, parent, false);
          holder3 = new viewHolder3();
          holder3.textView = (TextView)convertView.findViewById(R.id.textview3);
          holder3.imageView = (ImageView)convertView.findViewById(R.id.imageview);
          Log.e("convertView = ", "NULL TYPE_3");
          convertView.setTag(holder3);
          break;
        }
      }else{
        //有convertView,按样式,取得不用的布局
        switch(type)
        {
        case TYPE_1:
          holder1 = (viewHolder1) convertView.getTag();
          Log.e("convertView !!!!!!= ", "NULL TYPE_1");
          break;
        case TYPE_2:
          holder2 = (viewHolder2) convertView.getTag();
          Log.e("convertView !!!!!!= ", "NULL TYPE_2");
          break;
        case TYPE_3:
          holder3 = (viewHolder3) convertView.getTag();
          Log.e("convertView !!!!!!= ", "NULL TYPE_3");
          break;
        }
      }

    //设置资源
      switch(type)
      {
        case TYPE_1:
          holder1.textView.setText(Integer.toString(position));
          holder1.checkBox.setChecked(true);
          break;
        case TYPE_2:
          holder2.textView.setText(Integer.toString(position));
          break;
        case TYPE_3:
          holder3.textView.setText(Integer.toString(position));
          holder3.imageView.setBackgroundResource(R.drawable.icon);
          break;
      }

      return convertView;
    }
  }

  //各个布局的控件资源
  class viewHolder1{
    CheckBox checkBox;
    TextView textView;
  }

  class viewHolder2{
    TextView textView;
  }

  class viewHolder3{
    ImageView imageView;
    TextView textView;
  }
}

2.recyclerview;

public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    Context mContext;


    public MyAdapter(Context context){
        mContext = context;
    }






    class TextViewHolder extends RecyclerView.ViewHolder{


        public TextViewHolder(View itemView) {
            super(itemView);
        }
    }


    class ImageViewHolder extends RecyclerView.ViewHolder{
        public ImageViewHolder(View itemView) {
            super(itemView);
        }
    }







    @Override
    public int getItemViewType(int position) {
        return position%2;
    }



    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        if (viewType == 0){
            View view = LayoutInflater.from(mContext).inflate(R.layout.layout_textitem,parent,false);
            return new TextViewHolder(view);
        }else {
            return new ImageViewHolder(LayoutInflater.from(mContext).
                    inflate(R.layout.layout_imageitem,null));
        }
    }


    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {


    }


    @Override
    public int getItemCount() {
        return 10;
    }
}







优雅实现RecyclerView多种布局

要优雅就要符合 开闭原则,当增加新的类型事只能扩展不能修改源代码。 package com.muiltityitem.adapter; import android.content.Contex...
  • qq909157370
  • qq909157370
  • 2017年01月12日 18:09
  • 554

RecyclerView中的多种布局

概念RecyclerView可以用于加载不同的视图类型,基于服务器的反馈,可能会要求加载不同的布局。我们需要在适配器中重写的方法:getItemViewType(),onCreatViewHolder...
  • qq_34767498
  • qq_34767498
  • 2016年07月14日 16:15
  • 3100

Android RecyclerView 多布局与混排

思路:创建 Activity public class MyRecyleDemo extends AppCompatActivity { private RecyclerView mRec...
  • danfengw
  • danfengw
  • 2016年11月14日 22:45
  • 5854

使用RecyclerView实现GridView和ListView混排的效果

单位在做股票相关的app,美工切出一个图,是一个GridView和ListView混排的效果图,而且在滚动的时候,还要实现相关类别名有推动的效果,如下图:        录制的效果不是很好,因为csd...
  • chenguang79
  • chenguang79
  • 2016年08月19日 10:25
  • 5531

RecyclerView的多种布局

我感觉最近RecyclerView很多,我也研究了下,希望和大家一起分享探讨,多多学习吧。 今天我就写一下复杂布局,上下刷新下拉加载还有分割线我就不写了,我还是提一下吧。 其实上下刷新加载在Githu...
  • Zzq_Big_Cow
  • Zzq_Big_Cow
  • 2016年11月17日 10:23
  • 554

RecyclerView的加载显示多种布局

RecyclerView是对ListView的封装,所以ListView上能用的方法对RecyclerView同样适用,并且会更简单在实际开发中,我们可能需要一个列表,显示多种布局,getItemVi...
  • a516972602
  • a516972602
  • 2016年03月04日 15:13
  • 25240

ListView与RecyclerView的区别

android 5.0推出了recyclerView,号称更快的listview,那他们究竟有什么本质上的不同呢?现在来好好探究下。RecycleBin vs Recycler这两个类是重用view的...
  • u014497502
  • u014497502
  • 2016年03月17日 21:30
  • 3532

RecyclerView与ListView对比浅析(二):View缓存篇

上一篇链接:RecyclerView与ListView对比浅析(一):初始化篇 (二)View缓存篇 1. AbsListView(源码版本4.4) RecyclerBin是AbsListV...
  • checkin001
  • checkin001
  • 2015年11月29日 17:39
  • 6828

RecyclerView展示多种布局

按照惯例 先看看效果图简介最上面是一个轮播图,然后下面是一个横向滑动的频道,然后下面就是一个GridView,再下面就是正常的布局显示了 当然这还不算是很复杂的布局,我这边只是讲讲原理和实现步骤,更...
  • dl10210950
  • dl10210950
  • 2017年04月19日 14:22
  • 807

Android ListView加载多item布局及性能优化

在开发过程中,遇到一些比较旧的项目,请求网络数据时,接口返回一长串的JSON字符串,其中包括各种不相关的数据。而我们又需要把这些数据一一对应写在同一个界面上,又需要分别展示在不同的布局上,这时候就需要...
  • donkor_
  • donkor_
  • 2016年11月17日 19:35
  • 1725
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:listview和recyclerview多布局
举报原因:
原因补充:

(最多只允许输入30个字)