RecycleView添加不同布局(类似上传图片)

主页面布局xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    >
    <android.support.v7.widget.RecyclerView
        android:id="@+id/rv_img"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

    </android.support.v7.widget.RecyclerView>
</LinearLayout>
</LinearLayout>

主页面代码

protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_img);
        rv_img = findViewById(R.id.rv_img);
        GridLayoutManager layoutManager = new GridLayoutManager(context,3, GridLayoutManager.VERTICAL,false);
        rv_img.setLayoutManager(layoutManager);
//        ImageModel img = new ImageModel();
//        img.setType("addimg");
//        mList.add(img);
        if (imageAdapter==null){
            imageAdapter = new ImageAdapter(context,mList);
            rv_img.setAdapter(imageAdapter);
        }else {
            imageAdapter.notifyDataSetChanged();
        }
    }

adapter布局xml

item_addimg.xml

  <ImageView
            android:id="@+id/iv_addimg"
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:background="@mipmap/choosephotos"
            />
item_img.mlx
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    >
        <TextView
            android:id="@+id/tv_item"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <ImageView
            android:id="@+id/iv_img"
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:adjustViewBounds="true"
            />

</LinearLayout>

getItemCount

  • maxCount:不超过5张
  • 第一次进入mList.size()==0
  • 默认显示1张添加的图片,所以mList.size()+1
  • 当mList.size()>=5时,隐藏掉默认添加的那张图片,所以返回mList.size();
   @Override
    public int getItemCount() {
        if (mList.size()<maxCount){
            return mList.size()+1;
        }else {
            return mList.size();
        }

    }

getItemViewType重点

  • 第一次返回true,所以return ADDIMAGE;
@Override
    public int getItemViewType(int position) {
        if (isShowAdd(position)){
            return ADDIMAGE;
        }else {
            return IMAGE;
        }
//        if ("addimg".equals(mList.get(position).getType())){
//            return ADDIMAGE;
//        }else {
//            return IMAGE;
//        }

    }
  • 第一次进入position==0,mList.size()==0,所以position = size;返回true
   private boolean isShowAdd(int position){
        int size = mList.size()==0?0:mList.size();
        System.out.println("position****"+position+"size******"+size);
        return position == size;
    }

onCreateViewHolder

@NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        if (i==ADDIMAGE) {
           return new ViewHolderAdd(LayoutInflater.from(mContext).inflate(R.layout.item_addimg, viewGroup, false));
       }else {
           return new ViewHolder(LayoutInflater.from(mContext).inflate(R.layout.item_img, viewGroup, false));
       }
    }

onBindViewHolder

@Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, final int i) {
        if (viewHolder instanceof ViewHolderAdd){
        //添加点击事件
           ((ViewHolderAdd) viewHolder).iv_addimg.setOnClickListener(new View.OnClickListener() {
               @Override
               public void onClick(View v) {
                   int mIndex =0;
                  
                           ImageModel imageMode0 = new ImageModel();
                           imageMode0.setType("img");
                           imageMode0.setImg(R.mipmap.ic_launcher);
                           imageMode0.setNumber("第几位" + i);
                           mList.add(mIndex, imageMode0)
                   notifyItemInserted(0);//列表position位置添加一条数据时可以调用,伴有动画效果
                   notifyItemRangeChanged(0, mList.size()+1);
//                   if (mList.size()!=5) {
//                       notifyItemInserted(mIndex);
//                       notifyItemRangeChanged(i, mList.size() - i);
//                   }else {
//                       notifyDataSetChanged();
//                   }

               }
           });
        }else {

                Glide.with(mContext).load(mList.get(i).getImg()).into(((ViewHolder)viewHolder).iv_img);
                //删除点击事件
            ((ViewHolder)viewHolder).iv_img.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (mList.size()>i) {
                        mList.remove(i);
                        notifyItemRemoved(i);
                        notifyItemRangeChanged(i, mList.size() - i);
                    }

                }
            });
                ((ViewHolder)viewHolder).tv_item.setText(i+"");
        }
    }

完整代码

public class ImageAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private Context mContext;
    private List<ImageModel> mList;
    private int IMAGE =1;
    private int ADDIMAGE =0;
    private int maxCount = 5;
    private int mType= 0;

    public ImageAdapter(Context context, List<ImageModel> list) {
        mContext = context;
        mList = list;
    }



    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        if (i==ADDIMAGE) {
           return new ViewHolderAdd(LayoutInflater.from(mContext).inflate(R.layout.item_addimg, viewGroup, false));
       }else {
           return new ViewHolder(LayoutInflater.from(mContext).inflate(R.layout.item_img, viewGroup, false));
       }
    }
    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, final int i) {
        if (viewHolder instanceof ViewHolderAdd){
           ((ViewHolderAdd) viewHolder).iv_addimg.setOnClickListener(new View.OnClickListener() {
               @Override
               public void onClick(View v) {
                   int mIndex =0;
                   switch (mType){
                       case 0:
                           ImageModel imageMode0 = new ImageModel();
                           imageMode0.setType("img");
                           imageMode0.setImg(R.mipmap.ic_launcher);
                           imageMode0.setNumber("第几位" + i);
                           mList.add(mIndex, imageMode0);
                           mType++;
                           break;
                       case 1:
                           ImageModel imageModel = new ImageModel();
                           imageModel.setType("img");
                           imageModel.setImg(R.mipmap.bg_float1);
                           imageModel.setNumber("第几位" + i);
                           mList.add(mIndex, imageModel);
                           mType++;
                           break;
                       case 2:
                           ImageModel imageMode2 = new ImageModel();
                           imageMode2.setType("img");
                           imageMode2.setImg(R.mipmap.bg_float2);
                           imageMode2.setNumber("第几位" + i);
                           mList.add(mIndex, imageMode2);
                           mType++;
                           break;
                       case 3:
                           ImageModel imageMode3 = new ImageModel();
                           imageMode3.setType("img");
                           imageMode3.setImg(R.mipmap.bg_float3);
                           imageMode3.setNumber("第几位" + i);
                           mList.add(mIndex,imageMode3);
                           mType++;
                           break;
                       case 4:
                           ImageModel imageMode4 = new ImageModel();
                           imageMode4.setType("img");
                           imageMode4.setImg(R.mipmap.ic_launcher_round);
                           imageMode4.setNumber("第几位" + i);
                           mList.add(mIndex,imageMode4);
                           mType=0;
                           break;
                   }
                   notifyItemInserted(0);//列表position位置添加一条数据时可以调用,伴有动画效果
                   notifyItemRangeChanged(0, mList.size()+1);
//                   if (mList.size()!=5) {
//                       notifyItemInserted(mIndex);
//                       notifyItemRangeChanged(i, mList.size() - i);
//                   }else {
//                       notifyDataSetChanged();
//                   }

               }
           });
        }else {

                Glide.with(mContext).load(mList.get(i).getImg()).into(((ViewHolder)viewHolder).iv_img);
            ((ViewHolder)viewHolder).iv_img.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (mList.size()>i) {
                        mList.remove(i);
                        notifyItemRemoved(i);
                        notifyItemRangeChanged(i, mList.size() - i);
                    }

                }
            });
                ((ViewHolder)viewHolder).tv_item.setText(i+"");
        }
    }



    @Override
    public int getItemViewType(int position) {
        if (isShowAdd(position)){
            return ADDIMAGE;
        }else {
            return IMAGE;
        }
//        if ("addimg".equals(mList.get(position).getType())){
//            return ADDIMAGE;
//        }else {
//            return IMAGE;
//        }

    }

    private boolean isShowAdd(int position){
        int size = mList.size()==0?0:mList.size();
        System.out.println("position****"+position+"size******"+size);
        return position == size;
    }
    @Override
    public int getItemCount() {
        System.out.println("position****11111111111");
        if (mList.size()<maxCount){
            return mList.size()+1;
        }else {
            return mList.size();
        }

    }
     class ViewHolder extends RecyclerView.ViewHolder{
         private ImageView iv_img;
         private final TextView tv_item;

         public ViewHolder(@NonNull View itemView) {
             super(itemView);
             iv_img = itemView.findViewById(R.id.iv_img);
             tv_item = itemView.findViewById(R.id.tv_item);
         }

     }
     class  ViewHolderAdd extends RecyclerView.ViewHolder{
        private ImageView iv_addimg;
         public ViewHolderAdd(@NonNull View itemView) {
             super(itemView);
             iv_addimg = itemView.findViewById(R.id.iv_addimg);

         }
     }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值