在 RecyclerView 中切换项目视图类型
Switching item viewtypes in RecyclerView
我的逻辑好像没问题,但就是行不通。
我有 2 个视图 A 和 B,我只想在 A 显示 5 次后显示 B 一次。
在我的适配器中
int itemCount = 0;
@Override
public int getItemViewType(int pos){
itemCount++;
if(itemCount == 4){
itemCount = 0;
return VIEW_B;
}else{
return VIEW_A;
}
}
我好像不知道怎么回事。任何帮助就足够了。
这不起作用,因为您将计数添加到全局变量,并且不能保证视图类型是连续的。而是使用
position % 5 == 0
对于 B 否则 A
问题是你的itemCount
变量;你应该摆脱它。 Android 系统可以(并且将会)为相同的位置重复调用 getItemViewType()
并将使用非连续的位置参数调用它。因此,您必须能够 return 一个仅基于方法的 pos
参数的值。
试试这个:
@Override
public int getItemViewType(int pos){
if((pos + 1) % 6 == 0){
return VIEW_B;
}else{
return VIEW_A;
}
}
请注意,if
子句不仅仅是 if (pos % 5 == 0)
,因为您说过不想从 "type a" 视图开始。
我的逻辑好像没问题,但就是行不通。 我有 2 个视图 A 和 B,我只想在 A 显示 5 次后显示 B 一次。 在我的适配器中
int itemCount = 0;
@Override
public int getItemViewType(int pos){
itemCount++;
if(itemCount == 4){
itemCount = 0;
return VIEW_B;
}else{
return VIEW_A;
}
}
我好像不知道怎么回事。任何帮助就足够了。
这不起作用,因为您将计数添加到全局变量,并且不能保证视图类型是连续的。而是使用
position % 5 == 0
对于 B 否则 A
问题是你的itemCount
变量;你应该摆脱它。 Android 系统可以(并且将会)为相同的位置重复调用 getItemViewType()
并将使用非连续的位置参数调用它。因此,您必须能够 return 一个仅基于方法的 pos
参数的值。
试试这个:
@Override
public int getItemViewType(int pos){
if((pos + 1) % 6 == 0){
return VIEW_B;
}else{
return VIEW_A;
}
}
请注意,if
子句不仅仅是 if (pos % 5 == 0)
,因为您说过不想从 "type a" 视图开始。