我有两个Arraylists
,在其中一个中,我存储了jSONObjects
,在另一个JSONObjects
中,我试图查看是否在第一个数组中包含了在第二个元素中绘制元素,然后绘制这些视图,但是我遇到indexOutOfBounds
异常,该项目被良性调用,因为该错误告诉我索引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
显示的那16个元素中绘制这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
参考
谢谢
答案 0 :(得分:1)
由于数组的大小不同,您会收到此类异常。
是否要显示所有元素,但仅突出显示两个数组包含的那些元素? 如果是这样,您应该:
-
方法应返回要显示其元素的数组的大小。可以说,您正在显示名为“ mArrayListElements”的数组中的项目。 尝试以下代码:
getItemCount()
在以下代码行中,您的ID出现问题:
@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)));
第二。
如果需要更改视图某些部分的颜色,则需要在xml文件中将ID设置为要更改的视图,然后在方法holder.itemView.setBackgroundColor(mContext.getResources().getColor(R.color.colorVincular));
中使用该ID。
例如:
在xml
findViewById(R.id.YOUR_ID)
在代码中
<View
android:id="@+id/my_view"
...
/>
P.S。顺便说一句,您应该记住,RecyclerView重用ViewHolders,因此当两个数组都包含您的项目时需要为视图更改颜色时,并且当仅主数组包含item时将默认颜色设置回去时,您需要处理两种情况。 。否则,在滚动时,某些视图的背景将以错误的颜色上色。
答案 1 :(得分:0)
通过解决问题
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));
}
谢谢大家的帮助!