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; 
    } 
} 

불행히도 위의 코드는 수퍼 클래스에서 대체하지 않습니다. 이 문제를 어떻게 해결해야합니까? getItemViewType 이후

답변

1

내가 getItemViewType 방법 내부의 알림 개체를 만들 수 있습니다, int position 허용합니다

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)를 확인하십시오. 건배. –

관련 문제