【问题标题】:Add buttons to ArrayList at the specifed index在指定索引处将按钮添加到 ArrayList
【发布时间】:2013-11-29 10:14:51
【问题描述】:

我正在尝试向 ArrayList 添加一个按钮,但是当我指定索引时出现一个错误,提示索引超出范围。

我这样初始化数组:

ArrayList<Button> buttons = new ArrayList<Button>();

我有一个整数变量“order”,它表示按钮的优先级。当按钮的优先级为 0 时,它应该是数组中的第一个值。

异常出现以下语句:

buttons.add(order,btn);

编辑:

order的值大于ArrayList的大小。我正在动态创建按钮。如何指定数组的大小?

【问题讨论】:

  • 请发布堆栈跟踪。
  • 我 95% 确定这是ArrayIndexOutOfBoundsException
  • 你正试图到达第 200 层,而第 199 层并不存在。

标签: java android arraylist


【解决方案1】:

查看 ArrayList add 方法的文档......它告诉你可能是什么原因......

http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#add(int, E)

order 的值可能大于 ArrayList 的大小。在将订单添加到列表之前打印订单价值,这将有所帮助...

【讨论】:

  • 我明白了,当尺寸是动态的时我怎么能做到?
  • 检查数组的大小,看看顺序是否更大,只需buttons.add(btn);这样 btn 将被添加到最后
  • 我很快想到的一件事是创建一个像 ButtonWrapper 这样的 Wrapper 类,它有 2 个字段,Order 和 Button 以及一个 Comparator,它将比较 2 个 ButtonWrapper 的顺序。将 ButtonWrapper 的实例添加到数组列表中,并在使用它之前根据顺序对这个数组列表进行排序。
【解决方案2】:

如果索引大于ArrayList 的大小,则不能add 给定索引处的元素。我想文档清楚地说明了这一点。

【讨论】:

    【解决方案3】:

    .add(int index, E object) 方法将在以下情况下抛出 IndexOutOfBoundsExceptionindex &lt; 0 || index &gt; size()

    在调用方法之前检查订单变量的值。

    【讨论】:

      【解决方案4】:

      如果您已经知道数组的最终大小,我建议您在创建数组时设置容量 像这样:“ArrayList 按钮 = new ArrayList (25);”为 25 数组元素的数量,从 0 开始到索引 24,到 qvoid index out of bounds 错误我还建议你填充你的数组,然后你在指定索引处写buttons.add(index,element)已经是一个元素它要做的就是将现有元素移动到下一个位置(如果元素的索引为 0,添加后将为 1),而不是你应该尝试以这种方式预先存在的 button.set(index,element)元素将替换为您希望添加的元素

      【讨论】:

        猜你喜欢
        • 2011-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-17
        • 2014-06-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多