2016-06-28 18 views
0

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(); 
    } 
+0

Sind Sie sicher, dass getGrade() -1 nur einmal hat? – KDeogharkar

+0

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

Antwort

0

Dies ist peinlich. Alles ist in Ordnung, nur mein Header-Layout füllte den ganzen Bildschirm und ich musste scrollen, um den Rest meiner Liste zu sehen.

Verwandte Themen