我有两个Arraylists
,其中一个我存储了jSONObjects
,另一个JSONObjects
也存储了,我正在尝试看看第一个数组中是否包含第二个数组中的元素,然后绘制这些 View ,但我收到 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));
}
...
如何从 mArrayListElements
绘制 mArrayListSelectedTags
内的 View ?
更加一致
mArrayListElements
具有从 0 到 15 的元素,mArrayListSelectedTags
例如具有元素 0 、 5 、 9 。然后我只想绘制 mArrayListElements
显示的 16 个元素中的 3 个元素
编辑:我这样做是为了根据数组的项目位置创建 View
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
reference
谢谢
最佳答案
您收到此类异常是因为数组的大小不同。
是否要显示所有元素,但仅突出显示哪两个数组包含的元素? 如果是这样,您应该:
getItemCount()
方法应返回数组的大小以及您要显示的元素。假设您正在显示名为“mArrayListElements”的数组中的项目。 试试这个代码:
@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)); } }
您在这行代码中的 ID 有问题:
holder.itemView.findViewById(mArrayListElementos.indexOf(mArrayListSelectedTags.get(i)));
有两种方法可以解决这个问题。
首先。
如果你需要改变整个 View 的背景颜色,你可以使用:
holder.itemView.setBackgroundColor(mContext.getResources().getColor(R.color.colorVincular));
第二。
如果您需要更改 View 某些部分的颜色,则需要在 xml 文件中将 id 设置为 View (要更改的 View ),然后在方法 findViewById(R.id.YOUR_ID) 中使用该 id )
。
例如:
在 XML 中
<View
android:id="@+id/my_view"
...
/>
在代码中
holder.itemView.findViewById(R.id.my_view);
附注顺便说一句,您应该记住,RecyclerView 重用 ViewHolders,因此您需要处理这两种情况,当两个数组都包含您的项目时,您需要更改 View 的颜色,并在只有主数组包含项目时设置默认颜色。否则,在滚动时,某些 View 的背景颜色将是错误的。
关于java - RecyclerView onBindViewHolder indexOutOfBounds 尝试在 ArrayList 内绘制元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52394498/