在执行recyclerView.addView时,对空对象引用的'boolean android.support.v7.widget.RecyclerView $ ViewHolder.shouldIgnore()'

时间:2016-11-19 16:50:59

标签: android android-recyclerview

为什么我在recyclerView.setAdapter()

之后尝试向recyclerView添加其他视图

返回此错误

Attempt to invoke virtual method 'boolean android.support.v7.widget.RecyclerView$ViewHolder.shouldIgnore()' on a null object reference

示例代码

...
recyclerView.setAdapter(mAdapter);

TextView textView = new TextView(this);
textView.setText("TEST");

recyclerView.addView(textView);

与已在recyclerView中显示的视图相比,其他视图不同。但是我要添加的附加视图应该在recyclelerview的末尾显示吗?

2 个答案:

答案 0 :(得分:4)

我认为,问题是:

您已将recyclerview的适配器设置为使用类

创建的适配器

适配器: Adapter对象充当AdapterView与该视图的基础数据之间的桥梁。适配器提供对数据项的访问。适配器还负责为数据集中的每个项目创建视图。

因此,您的适配器视图已经为您的recyclerView项目提供了视图。

现在,当您尝试插入一个超出适配器提供的视图的上下文的项目时,它会显示一条错误,指出您的视图可能与适配器的上下文不同。

所以它不接受你的recyclerView中的textView,因为它应该是你的适配器类提供的cardview形式。

答案 1 :(得分:0)

发生此错误,因为RecyclerView创建自己的视图(请参阅.onCreateViewHolder()方法) - 它管理视图本身,您不能添加这样的视图。 RecyclerView(这就是它所谓的原因)重用了膨胀的视图,因此它不必每次都创建新的视图。您应该添加一些数据对象并在ViewHolder实现中绑定该对象