RecyclerView에 여러개의 뷰타입을 넣을 수 있을까요?
조회수 10702회
https://developer.android.com/intl/ko/training/material/lists-cards.html 여기 보면
RecyclerView만들때 밑의 코드처럼 RecyclerView.Adapter에 ViewHolder를 포함시켜서 만들잖아요.
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private String[] mDataset;
public MyAdapter(String[] myDataset) {
mDataset = myDataset;
}
public static class ViewHolder extends RecyclerView.ViewHolder {
public TextView mTextView;
public ViewHolder(TextView v) {
super(v);
mTextView = v;
}
}
@Override
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.some_layout, parent, false);
//findViewById...
ViewHolder vh = new ViewHolder(v);
return vh;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.mTextView.setText(mDataset[position]);
}
@Override
public int getItemCount() {
return mDataset.length;
}
}
제 질문은 RecyclerView에서 뷰타입을 여러개 넣을수 있는가에요.
1 답변
-
네 가능합니다. getItemViewType()만 구현하시면 됩니다. 그리고 onCreateViewHolder()에서 viewType을 지정하시면 됩니다.
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { class ViewHolder0 extends RecyclerView.ViewHolder { ... } class ViewHolder2 extends RecyclerView.ViewHolder { ... } @Override public int getItemViewType(int position) { // Just as an example, return 0 or 2 depending on position // Note that unlike in ListView adapters, types don't have to be contiguous return position % 2 * 2; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { switch (viewType) { case 0: return new ViewHolder0(...); //1번 뷰타입 case 2: return new ViewHolder2(...); //2번 뷰타입 ... } } }
댓글 입력