[英]Add static default item in RecyclerView
I have a horizontal RecyclerView
that displays 7 images from the users device (changing as user keeps taking pictures).我有一个水平的RecyclerView
,它显示来自用户设备的 7 张图像(随着用户不断拍照而变化)。 I would like to add a default icon at the end of the 7 images, with an onclick capability.我想在 7 个图像的末尾添加一个默认图标,具有 onclick 功能。 How can I go about doing this?我怎么能 go 关于这样做?
In the image above the plus icon should be the default icon, however it should be at the end of the images.在上面的图像中,加号图标应该是默认图标,但它应该位于图像的末尾。
UPDATED:更新:
RecentPhotosAdapter.java最近照片适配器.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); } } }
You can achieve this by making the default icon as a "ViewType" of your adapter.您可以通过将默认图标设置为适配器的“ViewType”来实现此目的。 Override getItemViewType to return a different value for your last item.覆盖 getItemViewType 以为您的最后一项返回不同的值。
@Override
public int getItemViewType(int position) {
return (position == mData.size()) ? VIEW_TYPE_DEFAULT : VIEW_TYPE_IMAGE;
}
Now in the onCreateViewHolder, handle both the view Types.现在在 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
}
}
Add 1 to your ItemList size to accomodate this extra view:将 1 添加到您的 ItemList 大小以容纳这个额外的视图:
@Override
public int getItemCount() {
return mData.size() + 1;
}
Your Updated code:您更新的代码:
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.