2013-08-30 7 views
19

Ich schreibe ein Activity in Android, wo ich zwei Radiobuttons unter einer RadioGroup haben. Eine davon ist standardmäßig aktiviert. Aber ich kann das Ereignis in onCreate Methode nicht auslösen, damit ich etwas darin tun kann. Die onCheckedChanged läuft gut, wenn Sie darauf klicken.android onCheckedChanged für radioogroup

RadioGroup ItemtypeGroup = (RadioGroup) findViewById(R.id.rechargeItemtype); 
    RadioButton providerRadio = (RadioButton) findViewById(R.id.a); 
    providerRadio.performClick(); 

    ItemtypeGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

     @Override 
     public void onCheckedChanged (RadioGroup group,int checkedId){ 

      Log.d("chk", "id" + checkedId); 

      if (checkedId == R.id.a) { 
       //some code 
      } else if (checkedId == R.id.b) { 
       //some code 
      } 
     } 
    }); 
+0

Versuchen Sie, Ihren 'performClick()' Code, nachdem Sie den 'Listener' setzen – codeMagic

+0

Danke für den Kommentar, aber kein Glück :( – user2534310

+0

Hmmm ... haben Sie einen Haltepunkt in Ihrem' Listener' setzen, um sicher zu sein, dass es nicht ist 't gehen dort und etwas anderes drinnen ist es nicht vermasseln? – codeMagic

Antwort

35

Zum Auslösen eines Radio-Kontrollkästchens für den Standard beim Initialisieren. Setzen Sie alles auf unmarked mit der ClearCheck-Methode, setzen Sie dann den Handler und setzen Sie den Standard und Ihr Handler wird ausgelöst.

itemtypeGroup.clearCheck(); 

dann wie immer einen Listener hinzufügen ...

itemtypeGroup 
     .setOnCheckedChangeListener(new OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(RadioGroup group, int checkedId) { 
Log.d("chk", "id" + checkedId); 

       if (checkedId == R.id.a) { 
        //some code 
       } else if (checkedId == R.id.b) { 
        //some code 
       } 

      } 

     }); 

Dann überprüfen Sie die Standard-Radio-Button und Ihre Zuhörer anspringt.

rb = (RadioButton) view.findViewById(R.id.a); 
rb.setChecked(true); 

Good Luck

+0

das funktioniert +1 :) – user2534310

+0

Was bedeutet das "rb = (RadioButton) view.findViewById (R.id.a);" bedeuten? Müssen wir in on onCheckedChanged deklarieren? –

+0

Drei Schritte. Alles löschen, Draht-Handler, Standard setzen. Da der Standardwert festgelegt wird, nachdem der Listener verkabelt wurde, wird der Listener-Code ausgeführt. – danny117

5
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(RadioGroup group, int checkedId) { 

      if (checkedId == R.id.radioButton1) { 
      //do work when radioButton1 is active 

      } else if (checkedId == R.id.radioButton2) { 
      //do work when radioButton2 is active 
      } 

     } 
    }); 

diese Arbeit für mich. Hoffnung ist hilfreich

2

Das Problem liegt daran, dass SieOnCheckedChangeListeneraufRadioGroupnach demproviderRadio.performClick();Methodenaufruf zu setzen.

Deshalb, wenn providerRadio.performClick(); Methode ausgeführt wird bis dann ist ihre OnCheckedChangeListener zur Verfügung zu rufen. Damit es funktioniert, müssen Sie den Listener vor dem Aufruf der Methode performClick() einrichten.

Und anstatt RadioButton.performClick() zu verwenden, sollten Sie RadioGroup.check() Methode verwenden, um das aktuelle geprüfte RadioButton zu ändern.

So können Sie diesen Code verwenden, um aktuelle Auswahl der Radiogroup zu ändern

RadioGroup ItemtypeGroup = (RadioGroup) findViewById(R.id.rechargeItemtype); 
ItemtypeGroup 
     .setOnCheckedChangeListener(new OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(RadioGroup group, int checkedId) { 
       Log.d("chk", "id" + checkedId); 

       if (checkedId == R.id.a) { 
        //some code 
       } else if (checkedId == R.id.b) { 
        //some code 
       } 

      } 

     }); 
ItemtypeGroup.check(R.id.a); 

Hinweis: - Stellen Sie sicher,RadioGroup.check()Methode aufzurufen nach der Zugabe vonOnCheckedChangeListenerwie oben im Code-Schnipsel.

+1

Das hat funktioniert. Vielen Dank! –

0

Ich denke, Sie führen einen Klick vor dem Einstellen des Listeners auf die Gruppe, deshalb Ereignis wird nicht ausgelöst.

3

Versuchen Sie diesen Code.

Deklarieren Sie diesen Code in Ihrer onCreate-Methode.

RadioGroup radioGroup = (RadioGroup) findViewById(R.id.radiogroup); 
    radioGroup.clearCheck(); 
    radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(RadioGroup group, int checkedId) { 

      RadioButton rb = (RadioButton) group.findViewById(checkedId); 
      if (null != rb && checkedId > -1) { 

       // checkedId is the RadioButton selected 
       switch (checkedId) { 
        case R.id.one: 
        // Do Something 
         break; 

        case R.id.two: 
        // Do Something 
         break; 

        case R.id.three: 
        // Do Something 
         break; 
       } 
      } 
     } 

    }); 

Hoffe, das hilft.