1

私のジレンマは、私が使いたいということです

radioGrp.clearCheck(); 

いくつかの調査の後、それを行う方法は次のようになることがわかりました

        selectedid = radioGrp.getCheckedRadioButtonId();
    if (selectedid > 0) {
        radioGrp.clearCheck();
    }

これは、getCheckid が負の数などになる可能性があるという問題が原因です。ただし、同じアクティビティでそれと次を使用するにはどうすればよいですか。oncheckedchangedlistener には、問題を引き起こしていると思われる独自の int id があります....

radioGrp.setOnCheckedChangeListener(new OnCheckedChangeListener() {
        public void onCheckedChanged(RadioGroup group, int checkedId) {
.....

私は定期的にこのエラーを受け取ります

10-04 08:44:03.728: E/AndroidRuntime(420): FATAL EXCEPTION: main
10-04 08:44:03.728: E/AndroidRuntime(420): java.lang.NullPointerException
10-04 08:44:03.728: E/AndroidRuntime(420):  at com.mangodeveloper.mcathomie.McatActivityGame$1.onCheckedChanged(McatActivityGame.java:93)
10-04 08:44:03.728: E/AndroidRuntime(420):  at android.widget.RadioGroup.setCheckedId(RadioGroup.java:172)
10-04 08:44:03.728: E/AndroidRuntime(420):  at android.widget.RadioGroup.check(RadioGroup.java:166)
10-04 08:44:03.728: E/AndroidRuntime(420):  at android.widget.RadioGroup.clearCheck(RadioGroup.java:205)
10-04 08:44:03.728: E/AndroidRuntime(420):  at com.mangodeveloper.mcathomie.McatActivityGame.fillQuestions(McatActivityGame.java:83)
10-04 08:44:03.728: E/AndroidRuntime(420):  at com.mangodeveloper.mcathomie.McatActivityGame.access$8(McatActivityGame.java:51)
10-04 08:44:03.728: E/AndroidRuntime(420):  at com.mangodeveloper.mcathomie.McatActivityGame$2.onClick(McatActivityGame.java:128)
10-04 08:44:03.728: E/AndroidRuntime(420):  at android.view.View.performClick(View.java:2485)
10-04 08:44:03.728: E/AndroidRuntime(420):  at android.view.View$PerformClick.run(View.java:9080)
10-04 08:44:03.728: E/AndroidRuntime(420):  at android.os.Handler.handleCallback(Handler.java:587)
10-04 08:44:03.728: E/AndroidRuntime(420):  at android.os.Handler.dispatchMessage(Handler.java:92)
10-04 08:44:03.728: E/AndroidRuntime(420):  at android.os.Looper.loop(Looper.java:123)
10-04 08:44:03.728: E/AndroidRuntime(420):  at android.app.ActivityThread.main(ActivityThread.java:3683)
10-04 08:44:03.728: E/AndroidRuntime(420):  at java.lang.reflect.Method.invokeNative(Native Method)
10-04 08:44:03.728: E/AndroidRuntime(420):  at java.lang.reflect.Method.invoke(Method.java:507)
10-04 08:44:03.728: E/AndroidRuntime(420):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
10-04 08:44:03.728: E/AndroidRuntime(420):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
10-04 08:44:03.728: E/AndroidRuntime(420):  at dalvik.system.NativeStart.main(Native Method)
4

1 に答える 1

1

さて、私は基本的な回避策を見つけることができました. 基本的に、変更されたリスナーのチェックを設定する前に、clear radiogroup コマンドを呼び出すだけです。しかし、あなたのアクティビティが私のようにループ内にある場合は、クリアコマンドが再び実行される前に setOnCheckedChangeListener を null に設定する必要があります。これが、重要な部分を含むソリューションのスケルトンです。もっと良いものが出てくるまでは、うまくいくはずです。

private void Method1() {    

    ...

    selectedid = radioGrp.getCheckedRadioButtonId();
    if (selectedid > 0) {
        radioGrp.clearCheck();
    }
    // ^ must come before the following method.             
    activateButtons();
}


private void activateButtons() {

    radioGrp.setOnCheckedChangeListener(new OnCheckedChangeListener() {
        public void onCheckedChanged(RadioGroup group, int checkedId) {

            ...

            radioGrp.setOnCheckedChangeListener(null);
        }
    });
    Method1();
}
于 2012-10-04T17:22:57.417 に答える