我有两个Arraylists
,其中一个我存储了jSONObjects
而另一个JSONObjects
,我试图看看是否在第一个数组中它包含第二个中的元素然后绘制这些视图但我得到了indexOutOfBounds
异常,这些项目是beign调用,因为错误告诉我索引3,大小3是选中的元素。
@Override
public void onBindViewHolder(TagsViewHolder holder, int position) {
if(mArrayListElements.contains(mArrayListSelectedTags.get(position))){
View v = holder.itemView.findViewById(mArrayListElements.indexOf(mArrayListSelectedTags.get(position)));
v.setBackgroundColor(mContext.getResources().getColor(R.color.colorVincular));
}
...
如何在mArrayListSelectedTags
中绘制mArrayListElements
中的视图?
更加一致
mArrayListElements
具有从0到15的元素,并且mArrayListSelectedTags
具有例如元素0,5,9。然后我只想绘制那些mArrayListElements
正在展示的那些元素中的3个元素
编辑:我已经这样做,以便根据数组的项目位置创建一个视图
for (int i = 0; i < mArrayListElementos.size(); i++) {
View v = holder.itemView.findViewById(mArrayListElementos.indexOf(mArrayListSelectedTags.get(i)));
v.setBackgroundColor(mContext.getResources().getColor(R.color.colorVincular));
}
但现在我得到了
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.setBackgroundColor(int)' on a null object
参考
谢谢
您收到此类异常,因为您的数组具有不同的大小。
是否要显示所有元素,但仅突出显示两个数组包含的元素?如果是这样,你应该:
getItemCount()
方法应该返回数组的大小,要显示的元素。@Override
public void onBindViewHolder(TagsViewHolder holder, int position) {
if(mArrayListSelectedTags.contains(mArrayListElements(position))){
View v = holder.itemView.findViewById(YOUR_VIEW_ID);
v.setBackgroundColor(mContext.getResources().getColor(R.color.colorVincular));
}
}
holder.itemView.findViewById(mArrayListElementos.indexOf(mArrayListSelectedTags.get(i)));
您有两种方法可以解决它。
第一。 如果需要更改整个视图背景的颜色,可以使用:
holder.itemView.setBackgroundColor(mContext.getResources().getColor(R.color.colorVincular));
第二。
如果需要更改视图某些部分的颜色,则需要在xml文件中将id设置为视图(要更改),然后在方法findViewById(R.id.YOUR_ID)
中使用该id。
例如: 在xml中
<View
android:id="@+id/my_view"
...
/>
在代码中
holder.itemView.findViewById(R.id.my_view);
附:顺便说一下,你应该记住,RecyclerView重用ViewHolders所以你需要处理这两种情况,当你需要在两个数组都包含你的项目时改变视图的颜色,并设置默认颜色,当只有主数组包含项目时。否则,在滚动时,您会看到一些颜色错误的视图背景。
通过这样做解决了这个问题
for (int i = 0; i < mArrayListSelectedTags.size(); i++) {
View v = holder.itemView;
v.findViewById(mArrayListElementos.indexOf(mArrayListSelectedTags.get(i)));
v.setBackgroundColor(mContext.getResources().getColor(R.color.colorVincular));
}
谢谢大家的帮助!