Recyclerview - OnCreateViewholder - 在某些情况下如何返回“null”

Posted

技术标签:

【中文标题】Recyclerview - OnCreateViewholder - 在某些情况下如何返回“null”【英文标题】:Recyclerview - OnCreateViewholder - How to return "null" if some condition 【发布时间】:2019-12-27 01:50:54 【问题描述】:

我正在努力处理一些代码,我想做的是在某些情况下膨胀视图,在其他情况下膨胀另一个不同的视图,但在其他情况下忽略寄存器并且不膨胀视图。所以我写了这个。如果 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”字段读取

【问题讨论】:

你不能在那里返回 null。你到底想达到什么目的? 我有一个带有“产品”的数组。通过某些功能,我确定该产品是(每个)父母还是孩子还是单独的。因此,如果产品是“父级”(i==0),我会夸大该产品布局。如果产品是“子”(i==1),我会夸大与“父”不同的产品布局。如果产品是“单独的”(i == 3),我不想夸大视图。我想忽略数组的那个乘积。 那么,那些“单独”的产品不应该出现在您提供给Adapter 的列表中。 请从产品列表中过滤掉“单独”的产品,或者您可以定义一个空布局并对其进行膨胀,但不推荐,第一种方法更好。 好吧。我会试试这个。我刚刚用一个空视图解决了这个问题,但感觉很脏。多谢你们!很快就会更新 【参考方案1】:

终于解决了。

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

谢谢大家!

【讨论】:

以上是关于Recyclerview - OnCreateViewholder - 在某些情况下如何返回“null”的主要内容,如果未能解决你的问题,请参考以下文章

关于RecyclerView

recyclerview 内的 RecyclerView 只显示父 recyclerview 的最后一项

RecyclerView详解

RecyclerView

RecyclerView嵌套RecyclerView问题

RecyclerView小结