gpt4 book ai didi

android - 循环内的 OnClickListener 抛出 IndexOutOfBounds 异常

转载 作者:太空宇宙 更新时间:2023-11-03 13:27:37 26 4
gpt4 key购买 nike

我正在尝试创建基本上是一张接一张重复的卡片列表,基于我通过循环获得的数组。

但出于某种原因,在循环内设置我的 OnClickListener 会导致 OOB 异常,但据我所知,这不应该是这样,所以我很感激被指出了正确的方向。

我的循环:

for(FAQNumber = 0; FAQNumber < questions.length; FAQNumber++){
stack.add(new FAQCard(questions[FAQNumber], answers[FAQNumber]));
(stack.get(FAQNumber)).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Bundle bundle = new Bundle();
bundle.putSerializable("title", questions[FAQNumber]);
bundle.putSerializable("position", FAQNumber);
startActivity(new Intent(getActivity().getBaseContext(), QuestionAnswer.class).putExtras(bundle));
}
});
}

questions 是在方法前面声明的数组,仅包含几个字符串。 stack 的行为类似于 List。

我在 bundle.putSerializable("title", questions[FAQNumber]); 尝试添加 questions[5] 时遇到 OOB 错误(如果我的 questions[] 包含 5 个值)。但我不明白这是怎么发生的,因为循环应该在 FAQNumber 等于 5 之前停止?

我在上面的循环中尝试做的就是将正确的问题传递给 bundle,这样当一张卡片被按下时,问题就会匹配。

无论如何,我们将不胜感激!

最佳答案

FAQNumber 似乎是在 for 循环之外而不是内部定义的。这意味着它在循环完成后继续存在......这是故意的吗?如果 questions 中有 5 个项目,则在循环终止后 FAQNumber 将等于 5(由于最后一个 FAQNumber++)。

OnClickListeneronClick(View v) 方法只有在按钮被实际点击后才会被调用。此时,它正在寻找 FAQNumber 现在等于 5。这里要理解的关键是,当您将 FAQNumber 放入 onClick 方法时,它实际上会在点击时查找 FAQNumber 的当前值,而不是在您定义方法时。您在这一行收到 OutOfBoundsException 的原因不是因为循环时发生了错误,而是因为按钮的点击行为位于此处,所以这是抛出错误的地方。您的循环实际上执行得很好。

相反,您需要将 FAQNumber 作为实例变量存储在您正在单击的 View 中,如下所示:

for(int i = 0; i < questions.length; i++) {
stack.add(new FAQCard(questions[i], answers[i]));
// Replace YourViewClass with whatever you're getting off the stack
YourViewClass obj = (stack.get(FAQNumber));
obj.setFaqNumber(i); // You'll need to add this method
obj.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Bundle bundle = new Bundle();
// You'll need to add the getFaqNumber() getter as well
bundle.putSerializable("title", questions[getFaqNumber()]);
bundle.putSerializable("position", getFaqNumber());
startActivity(new Intent(getActivity().getBaseContext(), QuestionAnswer.class).putExtras(bundle));
}
});

关于android - 循环内的 OnClickListener 抛出 IndexOutOfBounds 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17326766/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com