У меня есть список элементов, количество элементов составляет 5:Избыточные элементы в RecyclerView с колонтитулов
List<ReviewResource> reviewsList = new ArrayList<ReviewResource>();
ReviewResource r1 = new ReviewResource();
r1.setText("1");
reviewsList.add(r1);
ReviewResource r2 = new ReviewResource();
r2.setText("2");
reviewsList.add(r2);
ReviewResource r3 = new ReviewResource();
r3.setText("3");
reviewsList.add(r3);
ReviewResource r4 = new ReviewResource();
r4.setText("4");
reviewsList.add(r4);
ReviewResource r5 = new ReviewResource();
r5.setText("5");
reviewsList.add(r5);
Существует мой RecyclerView адаптер:
public class ReviewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private static final int TYPE_HEADER = 0;
private static final int TYPE_ITEM = 1;
private static final int TYPE_FOOTER = 2;
List<ReviewResource> listItems;
public ReviewAdapter(List<ReviewResource> list) {
listItems = list;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == TYPE_HEADER) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.reviews_header_item, parent, false);
return new VHHeader(v);
} else if (viewType == TYPE_ITEM) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.reviews_list_item, parent, false);
return new VHItem(v);
} else if (viewType == TYPE_FOOTER) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.reviews_footer_item, parent, false);
return new VHFooter(v);
}
throw new RuntimeException("there is no type that matches the type " + viewType + " + make sure your using types correctly");
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (holder instanceof VHHeader) {
VHHeader header = (VHHeader) holder;
} else if (holder instanceof VHItem) {
VHItem item = (VHItem) holder;
if (position + 1 < listItems.size()) {
ReviewResource currentReview = listItems.get(position+1);
item.reviewDescription.setText(currentReview.getText());
}
} else if (holder instanceof VHFooter) {
VHFooter footer = (VHFooter) holder;
}
}
@Override
public int getItemCount() {
return listItems.size() + 1;
}
public ReviewResource getItem(int position) {
return listItems.get(position);
}
class VHHeader extends RecyclerView.ViewHolder {
TextView txtTitle;
public VHHeader(View itemView) {
super(itemView);
}
}
class VHItem extends RecyclerView.ViewHolder {
TextView reviewDescription;
TextView reviewTitle;
public VHItem(View itemView) {
super(itemView);
reviewDescription = (TextView) itemView.findViewById(R.id.reviewer_text);
reviewTitle = (TextView) itemView.findViewById(R.id.review_title);
}
}
class VHFooter extends RecyclerView.ViewHolder {
TextView mWriteAReviewFooter;
TextView mViewAllFooter;
public VHFooter(View itemView) {
super(itemView);
this.mWriteAReviewFooter = (TextView) itemView.findViewById(R.id.write_a_review_footer);
this.mViewAllFooter = (TextView) itemView.findViewById(R.id.view_all_footer);
}
}
@Override
public int getItemViewType(int position) {
if (position == 0) {
return TYPE_HEADER;
} else if (position == getItemCount() - 1) {
return TYPE_FOOTER;
} else {
return TYPE_ITEM;
}
}
}
Ожидаемый результат
Header
нижнего колонтитула
Фактический результат
Заголовок
пустой элемент
нижнего колонтитула
только те пункты 3,4 и 5 показаны в моем RecyclerView
с пустой строки после 5-го пункта.
Почему?
В любом случае, спасибо!
Вы уверены, что ваш заголовок не скрывает пункт 1 и 2 под ним?возможно, добавить к нему маржу? – Robbert
Yeap, я уверен, что заголовок не переполняет элементы. Строка заголовка в 5 раз меньше, чем строка элементов, и я играю с полями, я думаю, что проблема в адаптере. – VLeonovs
проверить мой ответ –