0

我需要创建一个充满按钮的 ArrayList,它将链接到水平滚动布局。在将按钮文本插入 ArrayList 后,尝试更改按钮文本时出现 ResourceNotFound 错误:

public class Dictionary extends Activity implements Runnable, OnClickListener {
    //Candidates
    candidatesScrollView = (HorizontalScrollView) findViewById(R.id.activity_dictionary_horizontalScrollView1);

    candidatesButtons = new ArrayList<Button>();
    candidatesButtons.add((Button) findViewById(R.id.activity_dictionary_horizontalscrollview1_button1));
    candidatesButtons.add((Button) findViewById(R.id.activity_dictionary_horizontalscrollview1_button2));
    candidatesButtons.add((Button) findViewById(R.id.activity_dictionary_horizontalscrollview1_button3));
    candidatesButtons.add((Button) findViewById(R.id.activity_dictionary_horizontalscrollview1_button4));
    candidatesButtons.add((Button) findViewById(R.id.activity_dictionary_horizontalscrollview1_button5));
    candidatesButtons.add((Button) findViewById(R.id.activity_dictionary_horizontalscrollview1_button6));
    candidatesButtons.add((Button) findViewById(R.id.activity_dictionary_horizontalscrollview1_button7));
    candidatesButtons.add((Button) findViewById(R.id.activity_dictionary_horizontalscrollview1_button8));
    candidatesButtons.add((Button) findViewById(R.id.activity_dictionary_horizontalscrollview1_button9));
    candidatesButtons.add((Button) findViewById(R.id.activity_dictionary_horizontalscrollview1_button10));
    candidatesButtons.add((Button) findViewById(R.id.activity_dictionary_horizontalscrollview1_button11));
    candidatesButtons.add((Button) findViewById(R.id.activity_dictionary_horizontalscrollview1_button12));
    for(int i = 0; i < candidatesButtons.size(); i++)
        ((Button) candidatesButtons.get(i)).setOnClickListener(this);

    (...)
}

我尝试在此方法中更改该属性:

private void recognize() {

    (...)

    byte buffer[];
    buffer = RecogEngine.setResult(0); // and set the remaining data to engine
    try {
        candidatesString = new String(buffer, "UTF-8");     
        Button b;
        for (int i = 0; i < candidatesString.length(); i++)
            candidatesButtons.get(i).setText(candidatesString.charAt(i));
    }
    catch (Exception e) {
        e.printStackTrace();
    }

    (...)
}

我究竟做错了什么?

4

1 回答 1

0

您用于更改按钮字符串的 for 循环使用 CandidateString 长度作为循环增量器,因此如果长度超过 12,它将引发该异常,因为您只有 12 个按钮。

我不知道您尝试在该 for 循环中实现的业务逻辑。但是下面的代码应该适用于 12 个按钮。或者需要限制 for 循环 for min (12 or CandidateString.length)

for (int i = 0; i < candidatesString.length(); i++)
            if(i < 12)
                candidatesButtons.get(i).setText(candidatesString.charAt(i));
    }
于 2013-06-11T02:46:53.223 回答