3

ループを介して持っている配列に基づいて、基本的に次々と繰り返されるカードのリストを作成しようとしています。

ただし、何らかの理由で、ループ内で 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として動作します。

( 5 つbundle.putSerializable("title", questions[FAQNumber]);の値が含まれている場合) を追加しようとすると、OOB エラーが発生します。しかし、ループが5になる前に停止する必要があるため、それがどのように発生するのかわかりませんか?questions[5]questions[]FAQNumber

上記のループで私がやろうとしているのは、正しい質問をバンドルに渡して、カードが押されたときに質問が一致するようにすることだけです。

とにかく、どんな助けも大歓迎です!

4

2 に答える 2

0

@hatboysamの回答に加えて、しばらく変更することで機能するようになりました:

while(FAQNumber < questions.length){
    final int i = FAQNumber;
    final FAQCard FAQ = new FAQCard(questions[FAQNumber], answers[FAQNumber]);
    FAQ.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            // Create a new bundle to pass to the browser
            Bundle bundle = new Bundle();
            // Inform which feed item was selected
            bundle.putSerializable("title", questions[i]);
            bundle.putSerializable("position", i);
            // Start the new activity and pass on the bundle
            startActivity(new Intent(getActivity().getBaseContext(), QuestionAnswer.class).putExtras(bundle));
        }
    });
    stack.add(FAQ);
    FAQNumber++;
};
于 2013-06-26T18:19:11.330 に答える