私は非常に簡単な質問があります。私は Java に非常に慣れていないので、些細なことでしたら申し訳ありません。
私のアプリケーションのある状況では、一連の CheckBox のそれぞれをチェックするために同じ数のポイントを取得します。それぞれに OnClickListener を設定することもできますが、これは洗練されていない解決策のように思えるので、代わりに「これらの CheckBox のいずれかをチェックしても同じ結果が得られる」というコードを書きたいと思います。
残念ながら、私が書いたものは機能しません。
int[] ids = {R.id.cmCheckBox1, R.id.cmCheckBox2, R.id.cmCheckBox3, R.id.cmCheckBox4, R.id.cmCheckBox5, R.id.cmCheckBox6, R.id.ctCheckBox1, R.id.ctCheckBox2, R.id.ctCheckBox3};
final CheckBox[] checkBoxes = new CheckBox[ids.length];
for (int i = 0; i < ids.length; ++i) {
checkBoxes[i] = (CheckBox) findViewById(ids[i]);
checkBoxes[i].setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if (checkBoxes[i].isChecked()) {
Global.score += 5;
} else {
Global.score -= 5;
}
}
});
}
このコードでは、次のエラー メッセージが表示されます。
"Cannot refer to a non-final variable i in an inner class defined in a different method".
最終変数を変更できないため、 3行目をfor (final int i = 0; i < ids.length; ++i) {
変更しても役に立ちませんか?
どんな提案でも大歓迎です!