Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在RecyclerView中切换项目视图类型_Java_Android_Adapter_Android Recyclerview - Fatal编程技术网

Java 在RecyclerView中切换项目视图类型

Java 在RecyclerView中切换项目视图类型,java,android,adapter,android-recyclerview,Java,Android,Adapter,Android Recyclerview,我的逻辑似乎不错,但就是不起作用。 我有两个视图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; } }

我的逻辑似乎不错,但就是不起作用。 我有两个视图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;
    }
}

我好像不知道怎么了。任何帮助都足够。

这不起作用,因为您要将计数添加到全局变量中,并且不能保证视图类型是连续的。改用
位置%5==0

对于B,否则A

问题在于
itemCount
变量;你应该把它扔掉。Android系统可以(也将)为相同的位置重复调用
getItemViewType()
,并使用不连续的位置参数调用它。因此,您必须能够仅基于方法的
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”视图开始。

我不完全理解你的上一句话“因为你说如果你使用
if(pos%5==0)
你会看到
B a a a a a
。但是,您说“我只想在A显示5次后再显示B一次”,因此我假设您希望看到A A A。这意味着您必须使用
if((pos+1)%6==0){
来代替。是的,现在完全有意义了。因为0%5=0,因此条件将保持为真并返回B。