我有一些POJO,其日期字段显示在RecyclerView
内。现在我想仅在具有特定日期的第一个项目上显示日期。
这意味着如果我有4个日期为01/13/2017
的项目,则日期应显示在第一个项目上,而不显示在其余3个项目上。
有什么想法吗?
答案 0 :(得分:1)
您必须在Adapter类的onBindViewHolder方法中执行此操作。项目位置从0开始。因此,第一个项目位置将为0.对于第一个项目显示日期和其他项目设置日期查看器不可见。
public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> {
// other methods..
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
// initialize your other views
if (position == 0){
// set your date here
holder.textViewDate.setText(ages.get(position));
}else{
// this will disappear the date viewer
holder.textViewDate.setVisibility(View.GONE);
}
}
}
答案 1 :(得分:0)
在显示RecyclerView的项目之前,用布尔值标记所有第一个项目。 然后在适配器的方法中仅在标记了项目对象时显示日期信息。 显然,请记住在所有商品上显示和隐藏日期,以避免查看回收问题。
答案 2 :(得分:0)
将这样的内容添加到您的适配器:
onBindViewHolder(..) {
holder.itemView.dateTextView.setVisibility(hasDate(position) ? View.VISIBLE : View.GONE)
}
private boolean hasDate(int position){
if (position == 0)
return true;
return !items.get(position).getDate().equals(items.get(position-1).getDate());
}
答案 3 :(得分:0)
使用这种类型的recyclerView:
确保像这样扩展您的RrecyclerViewAdapter RecyclerView.Adapter
创建两个ViewHolder。
public class RecyclersViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
ArrayList<Data> arrayList;
Context context;
public final int TYPE_DATE = 0;
public final int TYPE_CONTENT = 1;
public RecyclersViewAdapter(ArrayList<Data> arrayList, Context context) {
this.arrayList = arrayList;
this.context = context;
}
@Override
public int getItemViewType(int position) {
// Data Class have three fields : Id,Date,Title
if (arrayList.get(position).getId().equals("") && arrayList.get(position).getTitle().equals(""))
return TYPE_DATE;
else
return TYPE_CONTENT;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
if (viewType == TYPE_DATE) {
View view = LayoutInflater.from(context).inflate(R.layout.recyc_row,null);
return new contentViewHolder(view);
} else {
View view1 = LayoutInflater.from(context).inflate(R.layout.recyc_row1,null);
return new dateViewHolder(view1);
}
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int position) {
if(viewHolder instanceof contentViewHolder) {
((contentViewHolder) viewHolder).id.setText(arrayList.get(position).getId());
((contentViewHolder) viewHolder).title.setText(arrayList.get(position).getTitle());
}
if(viewHolder instanceof dateViewHolder) {
((dateViewHolder) viewHolder).date.setText(arrayList.get(position).getStartDate());
}
}
public class contentViewHolder extends RecyclerView.ViewHolder {
TextView id,title;
public contentViewHolder(@NonNull View itemView) {
super(itemView);
id = itemView.findViewById(R.id.tv_id);
title = itemView.findViewById(R.id.tv_title);
}
}
public class dateViewHolder extends RecyclerView.ViewHolder {
TextView date;
public dateViewHolder(@NonNull View itemView) {
super(itemView);
date = itemView.findViewById(R.id.tv_date);
}
}
@Override
public int getItemCount() {
return arrayList.size();
}
}