0

私は現在、多くのチェックボックス(具体的には39)を備えたアプリを作成しており、クリックするとチェックを外すボタンを実装したいと考えています。私はボタンをあまり使ったことがないので (これまでのところ、新しいアクティビティを開始するためだけに使用していました)、どのように機能するかはまだ完全にはわかりません。いくつかの調査を行った後、これが私が思いついたものです。39 個のチェックボックスがありますが、短くするために、このコードにはいくつかだけ貼り付けます。

CheckBox cb1 = (CheckBox) findViewById(R.id.checkBox2);
CheckBox cb2 = (CheckBox) findViewById(R.id.checkBox3);
CheckBox cb3 = (CheckBox) findViewById(R.id.checkBox4);
public void onClick (View v){
    switch (v.getId()) {
        case R.id.button1:
            cb1.setChecked(false);
            cb2.setChecked(false);
            cb3.setChecked(false);
    }
}

LogCat:

06-12 06:45:09.922: E/AndroidRuntime(6623): FATAL EXCEPTION: main 
06-12 06:45:09.922: E/AndroidRuntime(6623): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.gw2legendary/com.example.gw2legendary.Bifrost}: java.lang.NullPointerException 
06-12 06:45:09.922: E/AndroidRuntime(6623): Caused by: java.lang.NullPointerException

問題は、このコードを追加して開こうとするとすぐにアクティビティがクラッシュすることです。このコードを削除すると、アクティビティは正常に開始されます。

4

1 に答える 1

1

コードが失敗する理由: CheckBox 変数をクラス フィールドとして宣言し、Activity の開始時に初期化されるため、findViewById()すべてに対して null が返されます。

簡単な修正: これらのすべての Checkbox 宣言を onClick メソッド内に移動します。クリックする前に別の場所でそれらを使用しているように見えますが。

より良い潜在的な解決策: 39 個 (!) のチェックボックスすべてを参照しようとする代わりに、コンテナへの参照を取得してすべての子を反復処理し、それらがチェックボックスであるかどうかを確認し、そうである場合はチェックを外す方がよい場合があります。 .

ただし、39個のチェックボックスは少しばかげているように思えます。

于 2013-06-12T04:56:04.277 に答える