簡體   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