Ich versuche viewType
auf meinem ViewHolder
zu verwenden, um die Kopfzeile von den anderen Elementen zu trennen. Mit dem Code, den ich derzeit habe, wird die Kopfzeile korrekt angezeigt, aber darunter wird kein anderes Element angezeigt. Wenn ich die viewType
Bedingung entfernen, werden alle Elemente korrekt angezeigt, aber natürlich hat die Kopfzeile nicht die gewünschte Ansicht.Mehrere Zeilenlayout Adapter wird nicht korrekt angezeigt
Hier ist mein Adapter Code:
public class GradelistAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private static final int ITEM = 1, HEADER = 0;
private List<ItemGrade> gradeList;
public class ItemViewHolder extends RecyclerView.ViewHolder {
public TextView course, grade;
public ItemViewHolder(View view) {
super(view);
course = (TextView) view.findViewById(R.id.course);
grade = (TextView) view.findViewById(R.id.grade);
}
}
public class HeaderViewHolder extends RecyclerView.ViewHolder {
public TextView header;
public HeaderViewHolder(View view) {
super(view);
header = (TextView) view.findViewById(R.id.year);
}
}
public GradelistAdapter(List<ItemGrade> gradelist) {
this.gradeList = gradelist;
}
@Override
public int getItemViewType(int position) {
if (gradeList.get(position).getGrade() == -1) {
return HEADER;
}
return ITEM;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
RecyclerView.ViewHolder viewHolder;
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
if (viewType == HEADER) {
View header = inflater.inflate(R.layout.gradelist_header, parent, false);
viewHolder = new HeaderViewHolder(header);
}
else{
View item = inflater.inflate(R.layout.gradelist_row, parent, false);
viewHolder = new ItemViewHolder(item);
}
Log.d("onCreateViewHolder", Integer.toString(viewType));
return viewHolder;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
ItemGrade entry = gradeList.get(position);
if (holder.getItemViewType() == HEADER) {
HeaderViewHolder headerViewHolder = (HeaderViewHolder) holder;
headerViewHolder.header.setText("Viti " + entry.getYear());
} else {
ItemViewHolder itemViewHolder = (ItemViewHolder) holder;
itemViewHolder.course.setText(entry.getCourse());
itemViewHolder.grade.setText(Integer.toString(entry.getGrade()));
}
}
@Override
public int getItemCount() {
return gradeList.size();
}
Sind Sie sicher, dass getGrade() -1 nur einmal hat? – KDeogharkar
Nun, momentan ja, denn wie Sie auf 'onCreateViewHolder()' sehen können, drucke ich den 'viewType' im Logcat und es ist korrekt. Der erste ist immer 0 (Kopf) und der nächste ist 1 (Artikel). Ich stelle das -1 zu Testzwecken, das Problem ist nicht da. – user3484582