2012-07-04 8 views
11

Questo è il mio codice:Come fare qualcosa quando una casella di controllo cambia stato?

<CheckBox 
     android:id="@+id/sprint_checkbox" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/sprint_game" /> 

    <CheckBox 
     android:id="@+id/marathon_checkbox" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/marathon" /> 

    <CheckBox 
     android:id="@+id/never_ending_checkbox" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/never_ending" /> 

Quello che voglio fare è "rilevare", quando una di queste viene controllata e quindi impostare gli altri due "disable", così l'utente può selezionare solo uno alla volta. Ho provato a usare ".setOnCheckedChangeListener", ma non posso farlo, qualcuno può aiutarmi con un po 'di codice? Grazie mille ragazzi!

+0

"" Ho provato a utilizzare ".setOnCheckedChangeListener", ma non riesco a farlo "" perché non è possibile farlo? Inserisci il codice del tuo 'setOnCheckedChangeListener' –

+0

Il listener di modifiche verificate è il modo per fare ciò di cui stai parlando. – matt5784

+2

perché non utilizzare un pulsante di opzione. (cioè gruppo radio). Questo è esattamente il motivo per cui sono fatti. L'uso può solo fare una foto, non è necessario disabilitare gli altri due. E comunque suCheckChangedListener funziona anche sui pulsanti radio. – drulabs

risposta

25

Questo è il modo in cui si riceve la notifica dei cambiamenti controllato:

CheckBox check = findViewById(R.id.sprint_checkbox); 
check.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      //do stuff 

     } 
    }); 

È anche possibile lasciare la vostra attività implementa l'interfaccia OnCheckedChangeListener e poi:

CheckBox check1 = findViewById(R.id.sprint_checkbox); 
CheckBox check2 = findViewById(R.id.marathon_checkbox); 
CheckBox check3 = findViewById(R.id.never_ending_checkbox); 

check1.setOnCheckedChangeListener(this); 
check2.setOnCheckedChangeListener(this); 
check3.setOnCheckedChangeListener(this); 

Override del metodo di interfaccia:

@Override 
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
    switch(buttonView.getId()){ 
       case R.id.sprint_checkbox: 
       //do stuff 
       break; 
       case R.id.marathon_checkbox: 
       //do stuff 
       break; 
       case R.id.never_ending_checkbox: 
       //do stuff 
       break; 

      } 

} 
+0

Grazie mille! – hyperloris

+1

Grazie. il tuo codice ha superato il mio problema mentre ricevevo valori booleani dalla casella di controllo. – BK19

1

Credo che un RadioButton sarebbe più adatto ai tuoi scopi.

<RadioGroup 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:id="@+id/radio_group1"> 
    <RadioButton 
     android:id="@+id/sprint" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/rad_option1" 
     android:checked="true" 
    android:onClick="onRadioButtonClick" 
     /> 
    <RadioButton 
     android:id="@+id/marathon" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/rad_option2" 
     android:onClick="onRadioButtonClick" 
     /> 
    <RadioButton 
     android:id="@+id/neverending" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/rad_option3" 
     android:onClick="onRadioButtonClick" 
     /> 
</RadioGroup> 

Poi nel codice:

public void onRadioButtonClick(View v) { 
    RadioButton button = (RadioButton) v; 
    // DO YOUR THING HERE DEPENDING ON WHICH RADIOBUTTON IS PICKED 
} 

In questo caso, non dovranno fare i conti con la disattivazione altre opzioni. L'utente avrà solo un'opzione da selezionare per impostazione predefinita.

1
@Override 
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 

    int id = buttonView.getId(); 

    if(isChecked){ 
     switch(id){ 
      case R.id.sprint: 
      //add to database 
      ... 
     } 
    } 
    else{ 
     switch(id){ 
      case R.id.sprint: 
      //remove from database 
      ... 
     } 
    } 
} 

Questo dovrebbe consentire di ID. Spero funzioni.