我有一个嵌套的recyclerview&在嵌套的回收器中实现OnClickListener()
并在其单击时替换片段。在第一个回收商的onBindViewHolder
我根据从服务器获得的数据设置新的适配器。
Category
设置类别适配器Item
设置项适配器以下是我如何设置
的代码if (myCategoryList.size() > 0 && isCategory) {
categoryAdapter = new CategoryAdapter(myCategoryList);
holder.recyclerView.setAdapter(categoryAdapter);
isCategory = false;
} else {
if (myItemListOfList.size() > 0) {
if (myCategoryList.size() > 0) {
itemAdapter = new ItemAdapter(myItemListOfList.get(position - 1));
holder.recyclerView.setAdapter(itemAdapter);
} else {
itemAdapter = new ItemAdapter(myItemListOfList.get(position));
holder.recyclerView.setAdapter(itemAdapter);
}
}
}
当我运行程序时,一切正常。当我点击view
类型的Category
时,它也可以正常工作。但是,当我点击类型为view
的{{1}}时,它会成功打开下一个片段,当我按下后退按钮时会出现问题,它会将我带到上面代码所在的上一个片段。然后Item
没有执行,所以我在上面的代码中代码为if statement
的行上显示ArrayIndexOutOfBoundsException
。
所以我想知道为什么在position - 1
的背面按下if语句没有执行以及为什么它在Item Fragment
的背面按下执行。
Category Fragment
是全局变量,默认情况下为true。我也尝试在构造函数中将其设置为true,但问题是相同的。
提前致谢。
答案 0 :(得分:1)
问题必须在这里。 position
的值必须保持一些意外的值。
itemAdapter = new ItemAdapter(myItemListOfList.get(position - 1));
你能改变你的代码并尝试一次
if (myCategoryList.size() > 0 && isCategory) {
categoryAdapter = new CategoryAdapter(myCategoryList);
holder.recyclerView.setAdapter(categoryAdapter);
isCategory = false;
} else {
if (myItemListOfList.size() > 0 && position <= myItemListOfList.size()-1 ) {
if (myCategoryList.size() > 0) {
position = ((position -1) < 0 ? 0 : position-1);
itemAdapter = new ItemAdapter(myItemListOfList.get(position));
holder.recyclerView.setAdapter(itemAdapter);
} else {
itemAdapter = new ItemAdapter(myItemListOfList.get(position));
holder.recyclerView.setAdapter(itemAdapter);
}
}
}