我有一个异构的Recycler-view适配器,它根据feed项的类型显示不同的viewholder。
除了布局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;
}
}
不幸的是,上面的代码并没有覆盖它的超类。我应该怎么做呢?
答案 0 :(得分:1)
由于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
内拨打我的列表。