我有一个异构的recycler-view适配器,根据提要项的类型显示一个不同的viewholder。
这些视图类型之间的唯一区别(除其布局XML之外)是数据库中名为notificationType(字符串)的列,该列分配值“ 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
接受int 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
中调用我的列表的麻烦。