1

私は、フィードアイテムのタイプに応じて異なるビューホールダーを表示する異種のリサイクルビューアアダプターを持っています。データベース属性に基づいて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; 
    } 
} 

残念ながら、上記のコードはスーパークラスからオーバーライドされません。これについてどうすればいいですか?

答えて

1

getItemViewTypeint positionを受け付けているので、私はgetItemViewTypeメソッド内で通知オブジェクトを作成することができます。

public int getItemViewType(int position) { 
     final ParseObject notifications = mNotifications.get(position); 
     if (notifications.getString("notificationType").equals("typeLike")) { 
      return LIKE; 
     } else { 
      return COMMENT; 
     } 
    } 

私はonBindViewHolder法に触れていないよ、この道を。私は完全にgetItemViewTypeの中に私のリストを呼び出すことができた私を完全に逃げた。

+0

これは痛みの仲間です。 [この記事](https://medium.com/@dpreussler/writing-better-adapters-1b09758407d2#.hicl5zt13)をご覧ください。乾杯。 –

関連する問題