2012-04-27 11 views
7

Ho un onClickListener di un pulsante che deve rilevare quale pulsante radio è stato selezionato quando l'utente fa clic sul pulsante. Attualmente, il Log.v che vedete qui sotto nella onClickListener non restituisce un po 'inutile di informazioni:getCheckedRadioButtonId() restituisce int inutile?

Questo viene fatto clic su Invia per tre volte con una radio diversa selezionato di volta in volta:

04-27 19: 24: 42,417: V/presentare (1564): 1094168584

04-27 19: 24: 45,048: V/presentare (1564): 1094167752

04-27 19: 24: 47,348: V/presentare (1564): 1094211304

Quindi, ho bisogno di sapere quale radioButton è effettivamente selezionato - c'è un modo per ottenere l'oggetto del radiobutton? Voglio essere in grado di ottenere il suo id # da XML, così come il suo testo corrente.

Ecco il codice rilevante:

public void buildQuestions(JSONObject question) throws JSONException { 

    radioGroup = (RadioGroup) questionBox.findViewById(R.id.responseRadioGroup); 

    Button chartsButton = (Button) questionBox.findViewById(R.id.chartsButton); 
    chartsButton.setTag(question); 
    Button submitButton = (Button) questionBox.findViewById(R.id.submitButton); 

    chartsButton.setOnClickListener(chartsListener); 
    submitButton.setOnClickListener(submitListener); 

    TagObj tagObj = new TagObj(question, radioGroup); 
    submitButton.setTag(tagObj); 

} 

public OnClickListener submitListener = new OnClickListener() { 
    public void onClick(View v) { 
     userFunctions = new UserFunctions(); 
     if (userFunctions.isUserLoggedIn(activity)) { 
      TagObj tagObject = (TagObj) v.getTag(); 
      RadioGroup radioGroup = tagObject.getRadioGroup(); 
      JSONObject question = tagObject.getQuestion(); 

      Log.v("submit", Integer.toString(radioGroup.getCheckedRadioButtonId())); 
      SubmitTask submitTask = new SubmitTask((Polling) activity, question); 
      submitTask.execute(); 

     } 
    } 
}; 

risposta

19

getCheckedRadioButtonId() restituisce il id del RadioButton (o -1 se non RadioButtons sono controllati) che è controllato dentro il Radiogroup. Se si imposta ids distinti al RadioButons nel layout allora si dovrà cercare di far corrispondere gli ID con il ritorno del metodo per vedere quale è controllato:

//field in the class 
private static final int RB1_ID = 1000;//first radio button id 
private static final int RB2_ID = 1001;//second radio button id 
private static final int RB3_ID = 1002;//third radio button id 

//create the RadioButton 
RadioButton rb1 = new RadioButton(this); 
//set an id 
rb1.setId(RB1_ID); 


    int btn = radioGroup.getCheckedRadioButtonId(); 
    switch (btn) { 
    case RB1_ID: 
     // the first RadioButton is checked. 
    break; 
     //other checks for the other RadioButtons ids from the RadioGroup 
    case -1: 
     // no RadioButton is checked inthe Radiogroup 
    break; 
    } 
+2

I miei pulsanti di opzione sono programmatici - non hanno parti contatore XML. C'è un modo per farlo ancora? – Davek804

+4

@ Davek804 Naturalmente. Quando crei i 'RadioButtons' li imposta con ID distinti con' setId() '. Quindi nella dichiarazione switch dalla mia risposta usa i numeri che assegni come id invece di 'R.id.radio_button1'. Ho modificato la mia risposta. – Luksprog

+0

Eccellente, tutto pronto! Grazie. – Davek804

2

memorizzare l'ID controllato, poi confrontarlo con ogni pulsante utilizzando la funzione radioButton.getID() utilizzando un'istruzione switch o catene if-else

Problemi correlati