3

テストアプリケーションを構築しようとしています.A、B、C、Dの選択肢にラジオボタンを使用しています。結果を計算しようとしています->たとえば、Aインクリメント1を押したとき、Bインクリメント2を押したときなどです。最初は Radio Group を使用していましたが、ユーザーが質問への回答を A から B に変更しようとすると、増加した結果が 2 ではなく 3 になることがわかりました。そこで、ラジオ ボタンに切り替えて、次のコードを試します。

      rb1.setOnCheckedChangeListener(new 
         android.widget.CompoundButton.OnCheckedChangeListener (){ 

        @Override
        public void onCheckedChanged(CompoundButton buttonView,
                boolean isChecked) {
            i++;
            if(rb2.isChecked())
            { 
                i--;
                rb2.setChecked(false);                  
            }

        }
            });

    rb2.setOnCheckedChangeListener(new android.widget.CompoundButton.OnCheckedChangeListener (){


        @Override
        public void onCheckedChanged(CompoundButton buttonView,
                boolean isChecked) {
            i++;

            if(rb1.isChecked())
            { 
                i--;
                rb2.setChecked(false);                          
            }
        }
            });

そして、2 番目のラジオ ボタンをチェックするには、2 回クリックする必要があります。これはバグですか、修正できますか。最初のクリック後にボタンの状態を変更する必要があります。すべてのアイデアやアドバイスを歓迎します。ありがとうございました。

4

1 に答える 1

1

switch ステートメントを使用するようにコードを変更できますが (コメントの 1 つで提案されているように)、自分が持っているものを続行し、質問に答えたい場合。rb2 のコードでは、rb1 がチェックされている場合は rb2 を false に設定すると言っています。したがって、rb1 をクリックし (現在はチェック/プッシュされています)、最初に rb2 をクリックしてチェックを外すと、2 回目はチェックされたままになります。

したがって、コーディングスタイルと手順に固執してください:

    public void onCheckedChanged(CompoundButton buttonView,
            boolean isChecked) {
        i++;

        if(rb1.isChecked())
        { 
            i--;
            rb2.setChecked(false);                          
        }
    }

次のようにする必要があります。

    public void onCheckedChanged(CompoundButton buttonView,
            boolean isChecked) {
        i++;

        if(isChecked && rb1.isChecked())
        { 
            i--;
            rb1.setChecked(false);                          
        }

        rb2.setChecked(isChecked);
    }

rb1 メソッドに同様の変更を加えます。

于 2013-03-26T19:27:21.350 に答える