根据数据库属性返回getItemViewType

时间:2016-10-11 20:06:28

标签: java android parse-platform android-recyclerview recycler-adapter

我有一个异构的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;
    }
}

不幸的是,上面的代码并没有覆盖它的超类。我应该怎么做呢?

1 个答案:

答案 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内拨打我的列表。