- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试创建基本上是一张接一张重复的卡片列表,基于我通过循环获得的数组。
但出于某种原因,在循环内设置我的 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++
)。
OnClickListener
的onClick(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/
对于我的 CS 类,我必须编写一个从 LinkedList 扩展的 Stacks 接口(interface)。但是,我的 peek() 方法显然有一个错误。当我将其实现到我的其他程序之一时,我返回一个
每次我尝试运行此方法 private void resetOdds() { mOdds[1] = 0.10; mOdds[2] = 0.25; mOdds[3] = 0.35;
我正在学习Java语言,我正在尝试制作MasterMind游戏。我在尝试编译时收到以下错误,在尝试调试代码后,我找不到错误: Exception in thread "main" java.lang.
下面的代码旨在获取一个 byte[] 和其他一些东西(参见它提供的代码)。然后它构建一个具有一定长度的数据包并返回它。我的问题是,当我将文件读入主程序时,我需要数据报包的缓冲区为剩余要发送的字节数(如
我正在做一项作业,需要计算位置 (x,y) 周围像素的 NxN 平均值。 当我传入一个大小变量时,我试图创建一个通用函数来执行此操作。 我只允许大小或 NxN 矩阵为 3x3、5x5 或 7x7。 我
这个问题在这里已经有了答案: Captured variable in a loop in C# (10 个答案) 关闭 3 年前。 我有两个代码循环片段,后者按预期工作,而前者抛出异常。为什么 f
我正在尝试统计一个计数数组,以跟上一组 50 个选择,其中每个选择有三个选项。根据我的导师的说法,计数数组应该有 150 个元素 (3 x 50 = 150)。但我在第 55 行不断收到 IndexO
我正在尝试构建一棵区间树。在这一部分中,我必须按升序排列所有左端点,并按升序排列所有右端点,并将它们放入单点列表中(无重复)。但是,当我尝试将正确的端点合并到点列表中时,我不断收到 indexOutO
我有一个看起来像这样的文本文件: Aaaaa 0.55 2 bbb 2.1 0.25 ccccc 71 21 ..... ..
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 已关闭 7 年前。 此问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-topic在这里
这个问题已经有答案了: What causes a java.lang.ArrayIndexOutOfBoundsException and how do I prevent it? (25 个回答)
我正在尝试计算金字塔的最小自下而上路径总和。我正在从文本文件读取输入。 我的文本文件示例: 5 6 6 5 3 5 8 3 9 2 1 4 7 9 2 7 第一行告知程序有关金字塔的大小,其他行正在组
我收到以下错误。 Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 1, Size: 0 at ja
有人能告诉我为什么我总是收到 IndexOutOfBoundsException 吗? Cheeses 只是一个包含一组字符串的数组。Alphabets 是一个包含单个字符串变量的类。 我正在尝试编写
我正在编写一个程序,该程序读取文件,然后检查是否有相同数量的右括号和左括号。因此,我所做的是使用 FileInputStream 和 Scanner 类来读取文件并将每个字符存储在 ArrayList
我正在尝试手动引发数组的索引越界异常。我知道要抛出常规异常,我可以执行以下操作: if(x>array.length){ throw new Exception("Bad choice!"); } 但
您好,我正在为编程类(class)编写一个程序,我得到: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 18
你好,我正在尝试编写 QuickSort 代码,但我总是遇到索引越界?我的代码如下: public class QuickSort { public void quickSort(ArrayL
到目前为止,这让我很困惑。 尝试运行此特定查询时,我不断收到 CursorIndexOutOfBounds。 Cursor c = db.rawQuery("SELECT * FROM tab
所以,我正在做一项作业,让一个类(class)接收为 Conway 的 Game Of Life 设置的文本文件。我已经写了所有东西,但是很难测试,因为我的错误处理很糟糕。我已经阅读了关于 try、c
我是一名优秀的程序员,十分优秀!