[英]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.