首页 > 解决方案 > Recyclerview - OnCreateViewholder - 在某些情况下如何返回“null”

问题描述

我正在努力处理一些代码,我想做的是在某些情况下膨胀视图,在其他情况下膨胀另一个不同的视图,但在其他情况下忽略寄存器并且不膨胀视图。所以我写了这个。如果 i== 0,我将返回一个视图,如果 i == 1,则返回另一个视图,如果 i == 3,我什么都不想做。在 BindViewHolder 方法上也是如此,其中案例 3 什么都不做。谢谢!

@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {

    if (i == 1){
    LayoutInflater layoutInflater = LayoutInflater.from(mContext);
    View celda = layoutInflater.inflate(R.layout.mag_slidingup_panelcontent_item_view, viewGroup, false);
    productViewHolder productViewHolder = new productViewHolder(celda);

    return productViewHolder;
    }else if (i == 0){
        LayoutInflater layoutInflater = LayoutInflater.from(mContext);
        View celda = layoutInflater.inflate(R.layout.cell_bottom_products_parent, viewGroup, false);
        productViewHolderParent productViewHolderParent = new productViewHolderParent(celda);

        return productViewHolderParent;
    }else
        return null;
}

@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {

    switch (viewHolder.getItemViewType()) {
        case 0:
            productViewHolderParent productViewHolderParent = (productViewHolderParent) viewHolder;
            productViewHolderParent.update(magProducts.get(i));
            break;
        case 1:
            productViewHolder productViewHolder = (productViewHolder) viewHolder;
            productViewHolder.update(magProducts.get(i));
            break;
        case 3:
            break;
    }
}

错误:java.lang.NullPointerException:尝试从空对象引用上的字段“android.view.View android.support.v7.widget.RecyclerView$ViewHolder.itemView”读取

标签: androidlistviewandroid-recyclerview

解决方案


最后我解决了。

在评论中,他们向我解释说我不能返回 null,我应该在将列表传递给适配器之前对其进行过滤。在我的特殊情况下,我需要我想隐藏的数据,所以我按照 CodeRanger 所说的做了。我夸大了一个空的视图。

谢谢大家!


推荐阅读