私は、フィードアイテムのタイプに応じて異なるビューホールダーを表示する異種のリサイクルビューアアダプターを持っています。データベース属性に基づいてgetItemViewTypeを返します。
これらのビュータイプの唯一の違いは、レイアウトXMLとは別に、notificationType(String)というデータベースの列であり、値 "typeLike"または "typeComment"のいずれかを割り当てます。
通知が「好き」であるか「コメント」であるかによってレイアウトが異なるため、この列の値に基づいてここでアイテムタイプを返したいと思います。私はgetItemViewTypeにクエリを置くべきですか?
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
final ParseObject notifications = mNotifications.get(position);
switch (holder.getItemViewType(notifications)) {
case LIKE:
ViewHolder vh1 = (ViewHolder) holder;
configureViewHolder1(vh1, position);
break;
case COMMENT:
ViewHolder2 vh2 = (ViewHolder2) holder;
configureViewHolder2(vh2, position);
break;
default:
RecyclerViewSimpleTextViewHolder vh = (RecyclerViewSimpleTextViewHolder) holder;
configureDefaultViewHolder(vh, position);
break;
}
}
@Override
public int getItemViewType(ParseObject notifications) {
if (notifications.getString("notificationType").equals("typeLike")) {
return LIKE;
} else {
return COMMENT;
}
}
残念ながら、上記のコードはスーパークラスからオーバーライドされません。これについてどうすればいいですか?
これは痛みの仲間です。 [この記事](https://medium.com/@dpreussler/writing-better-adapters-1b09758407d2#.hicl5zt13)をご覧ください。乾杯。 –