【问题标题】:ArrayIndexOutOfBoundsException when fragment recalled调用片段时的 ArrayIndexOutOfBoundsException
【发布时间】:2017-11-10 16:38:12
【问题描述】:

我有一个嵌套回收器视图并在嵌套回收器中实现了OnClickListener(),并在点击时替换片段。在第一个回收站的onBindViewHolder 中,我正在根据从服务器获得的数据设置新的适配器。

  1. 如果数据保持类型Category设置类别适配器
  2. 如果数据保持类型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);
                }
            }
        }

当我运行程序时,一切正常。当我单击Category 类型的view 时,它也可以正常工作。但是当我点击view 类型为Item 时,它成功打开了下一个片段,当我按下返回按钮时,问题就出现了,它将我带到上面代码所在的上一个片段。然后if statement 没有执行,所以我在上面代码中代码为position - 1 的行上得到ArrayIndexOutOfBoundsException

所以我想知道为什么在Item Fragment 的后按 if 语句没有执行以及为什么它在来自Category Fragment 的后按时执行。

isCategory 是全局变量,默认为 true。我也尝试在构造函数中将其设置为 true,但问题是一样的。

提前致谢。

【问题讨论】:

    标签: java android android-fragments exception adapter


    【解决方案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);
                    }
                }
            }
    

    【讨论】:

    • 现在没有执行但不显示最后一个索引的项目。
    • 你能告诉我位置的值是什么吗?
    • 当 position 为 0 时,它设置类别适配器,否则为 Item。当发生异常时,值为-1
    • 还是一样。我相信我的代码是正确的,您能否指出为什么它在后按时显示索引 -1,否则没有问题。
    • 这是执行java.lang.ArrayIndexOutOfBoundsException: length=12; index=-1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-25
    • 1970-01-01
    相关资源
    最近更新 更多