2013-08-30 12 views
19

Sto scrivendo un Activity in Android, dove ho due pulsanti di opzione sotto un Gruppo Radio. Uno di questi è selezionato per impostazione predefinita. Ma non posso attivare l'evento nel metodo onCreate in modo che possa fare qualcosa in questo. onCheckedChanged sta funzionando correttamente quando si fa clic su.android onCheckedChanged per radiogroup

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

Prova a inserire il codice 'performClick()' dopo aver impostato il 'listener' – codeMagic

+0

Grazie per il commento ma senza fortuna :( – user2534310

+0

Hmmm ... hai inserito un punto di interruzione nel tuo' ascoltatore' per essere sicuro che non sia Andiamo lì e qualcos'altro al suo interno non sta rovinando tutto? – codeMagic

risposta

35

per sparare una casella di controllo radio per la predefinita durante l'inizializzazione. Impostare tutto su deselezionato con il metodo clearCheck, quindi impostare il gestore, quindi impostare il valore predefinito e il gestore verrà attivato.

itemtypeGroup.clearCheck(); 

poi come al solito aggiungere un listener ...

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 
       } 

      } 

     }); 

quindi controllare il pulsante di opzione di default e il vostro ascoltatore sarà fuoco.

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

Good Luck

+0

questo funziona +1 :) – user2534310

+0

Cosa fa questo "rb = (RadioButton) view.findViewById (R.id.a);" significare? Dobbiamo dichiarare all'interno di onCheckedChanged? –

+0

Tre passi. Cancella tutto, carica gestore, imposta default. Poiché il valore predefinito è impostato dopo che il listener è stato cablato, il codice del listener verrà eseguito. – 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 
      } 

     } 
    }); 

questo lavoro per me. la speranza è utile

2

Il problema è dovuto al fatto, si sta impostandoOnCheckedChangeListenersuRadioGroupdopo il metodoproviderRadio.performClick();chiamata.

Ecco perché quando il metodo providerRadio.performClick(); viene eseguito fino a quel momento il loro numero è OnCheckedChangeListener disponibile per la chiamata. Quindi, per farlo funzionare, è necessario impostare Listener prima della chiamata al metodo performClick().

E invece di utilizzare RadioButton.performClick() è necessario utilizzare il metodo RadioGroup.check() per modificare l'attuale selezionato RadioButton.

in modo da poter utilizzare questo codice per modificare la selezione corrente di RadioGroup

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); 

Nota: - Assicurati di chiamareRadioGroup.check()metodo dopo l'aggiunta diOnCheckedChangeListenercome sopra nel frammento di codice.

+1

Questo ha funzionato. Grazie! –

0

Suppongo che si stia eseguendo il clic prima di impostare il listener nel gruppo, ecco perché l'evento non viene attivato.

3

Prova questo codice.

Dichiarare questo codice nel metodo onCreate.

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; 
       } 
      } 
     } 

    }); 

Spero che questo aiuti.

Problemi correlati