主页面布局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);
}
}
}