我有一个异构的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中调用我的列表的麻烦。

10-06 06:08