繁体   English   中英

在 RecyclerView 中添加 static 默认项

[英]Add static default item in RecyclerView

我有一个水平的RecyclerView ,它显示来自用户设备的 7 张图像(随着用户不断拍照而变化)。 我想在 7 个图像的末尾添加一个默认图标,具有 onclick 功能。 我怎么能 go 关于这样做?

像这样的东西: 在此处输入图像描述

在上面的图像中,加号图标应该是默认图标,但它应该位于图像的末尾。

更新:

最近照片适配器.java

 public class RecentPhotosAdapter extends RecyclerView.Adapter<RecentPhotosAdapter.ViewHolder> { // Variables private Context mContext; private ArrayList<String> mImage; private int VIEW_TYPE_DEFAULT = 0; private int VIEW_TYPE_IMAGE = 1; // Limit the recent photo selection int RECENT_PHOTO_LIMIT = 7; public RecentPhotosAdapter(Context mContext, ArrayList<String> mImage) { this.mContext = mContext; this.mImage = mImage; } @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { if (viewType == VIEW_TYPE_IMAGE) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recent_photos_item, parent, false); return new ViewHolder(view); } else { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.default_select_photos_item, parent, false); return new ViewHolder(view); } } @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { if(position < Math.min(mImage.size(), RECENT_PHOTO_LIMIT)){ String images = mImage.get(position); // Recent Photos Glide.with(mContext).load(images).placeholder(R.drawable.background_gallery_placeholder).transform(new CenterCrop(), new RoundedCorners(30)).into(holder.recent_photos_iv); // Default select photos holder.recent_photos_iv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // Do something here // Take user to image select slider } }); } else { //code for default view } } @Override public int getItemViewType(int position) { return (position == mImage.size())? VIEW_TYPE_DEFAULT: VIEW_TYPE_IMAGE; } @Override public int getItemCount() { return Math.min(mImage.size(), RECENT_PHOTO_LIMIT) + 1; } public class ViewHolder extends RecyclerView.ViewHolder{ ImageView recent_photos_iv; ImageView default_select_photo_iv; public ViewHolder(View itemView) { super(itemView); recent_photos_iv = itemView.findViewById(R.id.recent_photos_iv); default_select_photo_iv = itemView.findViewById(R.id.default_select_photo_iv); } } }

您可以通过将默认图标设置为适配器的“ViewType”来实现此目的。 覆盖 getItemViewType 以为您的最后一项返回不同的值。

@Override
public int getItemViewType(int position) {
    return (position == mData.size()) ? VIEW_TYPE_DEFAULT : VIEW_TYPE_IMAGE;
}

现在在 onCreateViewHolder 中,处理两个视图类型。

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    if (viewType == VIEW_TYPE_IMAGE) {

        //Create viewholder for your images
    }
    else {

        //Create viewholder for default view
    }
}

将 1 添加到您的 ItemList 大小以容纳这个额外的视图:

@Override
public int getItemCount() {
    return mData.size() + 1;
}

您更新的代码:

public class RecentPhotosAdapter extends RecyclerView.Adapter<RecentPhotosAdapter.ViewHolder> {

    // Variables
    private Context mContext;
    private ArrayList<String> mImage;
    private int VIEW_TYPE_DEFAULT=0;
    private int VIEW_TYPE_IMAGE=1;

    public RecentPhotosAdapter(Context mContext, ArrayList<String> mImage) {
        this.mContext = mContext;
        this.mImage = mImage;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

      if (viewType == VIEW_TYPE_IMAGE) {

         View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recent_photos_item, parent, false);
        return new ViewHolder(view);
        }
      else {

          //Create viewholder for default view
        }

    }
    
    @Override
    public int getItemViewType(int position) {
    return (position == Math.min(mImage.size(), RECENT_PHOTO_LIMIT)) ?VIEW_TYPE_DEFAULT : VIEW_TYPE_IMAGE;
    }
   
    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        if(position < Math.min(mImage.size(), RECENT_PHOTO_LIMIT)){
        String images = mImage.get(position);

        Glide.with(mContext)
                .load(images)
                .placeholder(R.drawable.background_gallery_placeholder)
                .transform(new CenterCrop(), new RoundedCorners(30))
                .into(holder.recent_photos_iv);

        holder.recent_photos_iv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // Do something here
                // Take user to image select slider
            }
        });
       }
       else {
            //code for default view
        }
    }

    @Override
    public int getItemCount() {
        // Limit the recent photo selection
        int RECENT_PHOTO_LIMIT = 7;
        return Math.min(mImage.size(), RECENT_PHOTO_LIMIT)+1;
    }

    public class ViewHolder extends RecyclerView.ViewHolder{

        ImageView recent_photos_iv;

        public ViewHolder(View itemView) {
            super(itemView);
            recent_photos_iv = itemView.findViewById(R.id.recent_photos_iv);
        }
    }
}
 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM