2015-06-18 2 views
2

Я использую RecyclerView + CardView, чтобы показать список текста теперь я пытаюсь добавить простой TextView заголовок в верхней части RecyclerView поэтому у меня есть две раскладки внутри адаптера, но теперь он показывает, как это в приложении:Заголовок TextView С RecyclerView

enter image description here

И это должно выглядеть следующим образом:

enter image description here

Так проблема в том, про bably с getItemCount и getItemViewType, что я должен изменить, чтобы заголовок отображался только один раз, а затем CardViews.

public class Adapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { 

private static final int LAYOUT_ONE = 0; 
private static final int LAYOUT_TWO = 1; 

List<AdapterData> mItems; 

public Adapter() { 
    super(); 
    mItems = new ArrayList<>(); 
    AdapterData data = new AdapterData(); 
    data.setCode("dummytext"); 
    data.setResult("dummytext"); 
    mItems.add(data); 

    data = new AdapterData(); 
    data.setCode("dummytext"); 
    data.setResult("dummytext"); 
    mItems.add(data); 

    data = new AdapterData(); 
    data.setCode("dummytext"); 
    data.setResult("dummytext"); 
    mItems.add(data); 

    data = new AdapterData(); 
    data.setCode("dummytext"); 
    data.setResult("dummytext"); 
    mItems.add(data); 

    data = new AdapterData(); 
    data.setCode("dummytext"); 
    data.setResult("dummytext"); 
    mItems.add(data); 

} 

@Override 
public int getItemViewType(int position) { 
    return position % 2; 
} 

@Override 
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    switch (viewType) { 

     case LAYOUT_ONE: return new ViewHolderFirst(LayoutInflater.from(parent.getContext()).inflate(R.layout.top_textview, parent, false)); 

     case LAYOUT_TWO: return new ViewHolderSecond(LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_view_card_item, parent, false)); 
    } 

    return null; 
} 

@Override 
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 
    switch (getItemViewType(position)) { 

     case LAYOUT_ONE: 
      ViewHolderFirst viewHolderFirst = (ViewHolderFirst)holder; 

      break; 

     case LAYOUT_TWO: 
      ViewHolderSecond viewHolderSecond = (ViewHolderSecond)holder; 
      AdapterData data = mItems.get(position); 
      viewHolderSecond.code.setText(data.getCode()); 
      viewHolderSecond.result.setText(data.getResult()); 

      break; 
    } 
} 

@Override 
public int getItemCount() { 
    return mItems.size(); 
} 



class ViewHolderFirst extends RecyclerView.ViewHolder { 
    public TextView header; 

    public ViewHolderFirst(View itemView) { 
     super(itemView); 
     header = (TextView)itemView.findViewById(R.id.header_textview); 

    } 
} 

class ViewHolderSecond extends RecyclerView.ViewHolder{ 
    public TextView code; 
    public TextView result; 

    public ViewHolderSecond(View itemView) { 
     super(itemView); 
     code = (TextView)itemView.findViewById(R.id.sims_code); 
     result = (TextView)itemView.findViewById(R.id.sims_result); 

    } 
} 


} 

ответ

3

в getItemViewType() попробовать этот

@Override 
public int getItemViewType(int position) { 
    return (position==0) ? 0 : 1; //try this line 
} 
+1

спасибо много работает только снимает 1-й cardview по какой-то причине –

Смежные вопросы