원하는 것을 얻으려면 RecyclerView.Adapter
에 getItemViewType(position)
을 무시해야합니다. int
을 반환하면이 위치를 나타내는 데 어떤 종류의보기가 사용되는지 알려줍니다.
다음은 createViewHolder (parent,viewType)
에 서로 다른 ViewHolders
을 작성하며이 경우 각 CardLayout에 대한 참조가 유지됩니다.
다음으로 bindViewHolder(holder, position)
에 스위치 문을 만들거나 가능한보기 목록을 검토하여 데이터로 채울 수 있습니다. 아래
샘플 코드 :
public GeneralViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
GeneralViewHolder holder;
View v;
Context context = viewGroup.getContext();
if (viewType == FIRST_TYPE) {
v = LayoutInflater.from(context)
.inflate(R.layout.first_card, viewGroup, false);
holder = new FirstTypeViewHolder(v); //Of type GeneralViewHolder
} else {
v = LayoutInflater.from(context)
.inflate(R.layout.second_card, viewGroup, false);
holder = new SecondTypeViewHolder(v);
}
return holder;
}
public void onBindViewHolder(GeneralViewHolder viewHolder, int i) {
if(getItemViewType(i)==FIRST_TYPE) {
FirstTypeViewHolder holder1 = (FirstTypeViewHolder)viewHolder;
} else {
SecondTypeViewHolder holder1 = (SecondTypeViewHolder)viewHolder;
}
}
public int getItemViewType (int position) {
//Some logic to know which type will come next;
return Math.random()<0.5 ? FIRST_TYPE : SECOND_TYPE;
}
https://developer.android.com/training/material/lists-cards.html. 다른 레이아웃의 경우 어댑터의 ViewType을 변경하십시오. –
@PedroOliveira 나는 이미 읽었지만, 하나의 카드로 처리 한 방법과 다른 것은 아닙니다. – safari
어댑터에서'getItemViewType'을 오버라이드하고 다른 뷰 타입을 반환해야만합니다. 즉, onCreateViewHolder (뷰포트를 2º 매개 변수로받는)에 다른 레이아웃을 적용 할 수 있습니다. –