オーバーライドgetItemViewType()
あなたのセクションのタイプを返すメソッド。そしてonCreateViewHolder()
メソッドでは、タイプに応じてレイアウトを膨張させます。
ついにonBindViewHolder()
方法で再び
次の種類に応じて、あなたのビューをレンダリングすることは、あなたに
class CustomRecyclerViewAdapter extends RecyclerView.Adapter<CustomRecyclerViewAdapter.ViewHolder> {
public final int NEWS_LAYOUT = 0;
public final int ARTICLE_LAYOUT = 1;
public final int PROGRESS_BAR_LAYOUT = 2;
ArrayList<YourModel> list;
Context context;
public CustomRecyclerViewAdapter(Context context) {
this.context = context;
}
@Override
public CustomRecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {
ViewHolder vh = null;
View v;
switch (viewType) {
case NEWS_LAYOUT:
v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.layout_card_view, parent, false);
vh = new ViewHolder(v, viewType);
break;
case ARTICLE_LAYOUT:
v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.layout_card_view, parent, false);
vh = new ViewHolder(v, viewType);
break;
case PROGRESS_BAR_LAYOUT:
v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.progress_bar, parent, false);
vh = new ViewHolder(v, viewType);
break;
default:
break;
}
return vh;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
try {
//assign data according to your types
}
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public int getItemCount() {
return list.size();
}
public void addAll(List list) {
if (null == this.list)
this.list = new ArrayList<>(;
else {
this.list.addAll(list);
}
}
public void clear() {
list.clear();
}
@Override
public int getItemViewType(int position) {
if (list.get(postion).getType().equals("News Layout")) {
return NEWS_LAYOUT;
} else if (list.get(postion).getType().equals("Article Layout")) {
return ARTICLE_LAYOUT;
} else if (list.get(postion).getType().equals("progressbar"))
return PROGRESS_BAR_LAYOUT;
}
return -1;
}
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public CardView cardView;
public ProgressBar progressBar;
public ViewHolder(View view, int type) {
super(view);
if (type == NEWS_LAYOUT || type == ARTICLE_LAYOUT) {
this.cardView = (CardView) view.findViewById(R.id.card_view);
this.cardView.setOnClickListener(this);
} else if (type == PROGRESS_BAR_LAYOUT) {
this.progressBar = (ProgressBar) view.findViewById(R.id.recycler_view_progress_bar);
}
}
@Override
public void onClick(View view) {
//perform operations
}
}
}
私は同意しないを助けるかもしれないダミーRecyclerViewAdapterです。私はこれが合理的な質問だと思う。 –