Java RecyclerView onBindViewHolder IndexOutfBounds尝试在ArrayList中绘制元素
我有两个Java RecyclerView onBindViewHolder IndexOutfBounds尝试在ArrayList中绘制元素,java,android,android-recyclerview,Java,Android,Android Recyclerview,我有两个Arraylists,其中一个我存储了jSONObjects,另一个jSONObjects,我试图查看第一个数组中是否包含第二个数组中的元素,然后绘制那些视图,但我得到了indexOutOfBounds异常,之所以调用这些项,是因为错误告诉我索引3,大小3是所选的元素 @Override public void onBindViewHolder(TagsViewHolder holder, int position) { if(mArrayListElemen
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));
}
...
如何在mArrayListElements
中的mArrayListSelectedTags
中绘制视图
更加一致
mArrayListElements
包含从0到15的元素,而mArrayListSelectedTags
包含例如元素0、5、9。然后我只想从这16个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));
}
参考文献
感谢您收到这样的异常,因为您的阵列大小不同 是否要显示所有元素,但仅突出显示这两个数组包含的元素? 如果是,你应该:
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中
顺便说一句,您应该记住,RecyclerView重用了ViewHolder,因此您需要处理这两种情况,即当两个数组都包含项目时,您需要更改视图的颜色,当只有主数组包含项目时,您需要将默认颜色设置回原处。否则,在滚动时,某些视图的背景颜色会错误。通过执行以下操作解决了此问题
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));
}
for(int i=0;i
谢谢大家的帮助 你在RecyclerView中展示的是什么?您是在两个列表中存储相同的对象,还是它们是表示相同数据的不同对象?json对象是否有任何可以用作id的属性?两个列表中的对象是相同的,leys说在其中一个列表中,我有16个JSONObject,在另一个列表中,我有16个存储中的4个,我想绘制,您在RecyclerView中显示的是什么?mArrayListSelectedTags有4个元素。位置指的是recyclerview中的位置。这符合你的逻辑吗?意思是你只展示了4件物品?谢谢你!编辑我的问题NPE的答案是,您正在寻找的视图不存在。但是我建议查看此链接,它可能有助于更快地获得解决方案。您好,感谢您的回复,现在视图v为nulljava.lang.NullPointerException:尝试在null对象上调用虚拟方法“void android.View.View.setBackgroundColor(int)”,它就会抛出reference@Toddxml文件中视图的id是什么?您的代码:holder.itemView.findViewById(mArrayListElements.indexOf(mArrayListSelectedTags.get(position));不正确
<View
android:id="@+id/my_view"
...
/>
holder.itemView.findViewById(R.id.my_view);
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));
}