2011-12-05 12 views
68

Voglio mettere un listener su un checkbox. Ho cercato informazioni ed è in questo modo:Android: listener listbox

satView = (CheckBox)findViewById(R.id.sateliteCheckBox); 

    satView.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(RadioGroup group, int checkedId) { 
      if (isChecked){ 
       // perform logic 
      } 
     } 

    }); 

Il problema è che Eclipse pensa che sia un OnCheckedChangeListener per una RadioGroup e non funziona. Come posso risolvere questo?

risposta

185

Si può fare questo:

satView.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

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

     } 
    } 
);  
+1

Grazie e qui è come rimuoverlo: http://stackoverflow.com/questions/18881817/removing-strikethrough-from-textview – Michal

+0

'' OnCheckedChangeListener' e CompoundButton.OnCheckedChangeListener' sono diverso. – zionpi

4

Change RadioGroup group con CompoundButton buttonView e quindi premere Ctrl + Maiusc + O per risolvere le vostre importazioni.

3

provare questo

satView.setOnCheckedChangeListener(new android.widget.CompoundButton.OnCheckedChangeListener.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(RadioGroup group, int checkedId) { 
      if (isChecked){ 
       // perform logic 
      } 
     } 

    }); 
6

Prova questo:

satView = (CheckBox) findViewById(R.id. sateliteCheckBox); 

satView.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
    @Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      if (buttonView.isChecked()) { 
       //checked 
      } 
      else 
      { 
       //not checked 
      } 

}); 

Spero che questo aiuti ...

39

si può anche andare a fare una semplice onClickListener:

satView.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       if(satView.isChecked()){ 
        System.out.println("Checked"); 
       }else{ 
        System.out.println("Un-Checked"); 
       } 
      } 
     }); 
+0

È davvero solo una soluzione funzionante quando ho voluto ascoltare una casella di controllo ** fare clic su azione **, non il suo ** stato ** come altre soluzioni consigliano lì. – Acuna

16

È ottieni l'errore perché imp package.You sbagliate orted dovrebbero import android.widget.CompoundButton.OnCheckedChangeListener;

Così il callback dovrebbero essere:

 box.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      // TODO Auto-generated method stub 

     } 
    }); 
4

Si potrebbe utilizzare questo codice.

public class MySampleActivity extends Activity { 
    CheckBox cb1, cb2, cb3, cb4; 
    LinearLayout l1, l2, l3, l4; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     cb1 = (CheckBox) findViewById(R.id.cb1); 
     cb2 = (CheckBox) findViewById(R.id.cb2); 
     cb3 = (CheckBox) findViewById(R.id.cb3); 
     cb4 = (CheckBox) findViewById(R.id.cb4); 
     l1 = (LinearLayout) findViewById(R.id.l1); 
     l2 = (LinearLayout) findViewById(R.id.l2); 
     l3 = (LinearLayout) findViewById(R.id.l3); 
     l4 = (LinearLayout) findViewById(R.id.l4); 
    } 

    @Override 
    protected void onPostCreate(Bundle savedInstanceState) { 
     super.onPostCreate(savedInstanceState); 
     cb1.setOnCheckedChangeListener(new MyCheckedChangeListener(1)); 
     cb1.setOnCheckedChangeListener(new MyCheckedChangeListener(2)); 
     cb1.setOnCheckedChangeListener(new MyCheckedChangeListener(3)); 
     cb1.setOnCheckedChangeListener(new MyCheckedChangeListener(4)); 
    } 

    public class MyCheckedChangeListener implements CompoundButton.OnCheckedChangeListener { 
     int position; 

     public MyCheckedChangeListener(int position) { 
      this.position = position; 
     } 

     private void changeVisibility(LinearLayout layout, boolean isChecked) { 
      if (isChecked) { 
       l1.setVisibility(View.VISIBLE); 
      } else { 
       l1.setVisibility(View.GONE); 
      } 

     } 

     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      switch (position) { 
       case 1: 
        changeVisibility(l1, isChecked); 
        break; 
       case 2: 
        changeVisibility(l2, isChecked); 
        break; 
       case 3: 
        changeVisibility(l3, isChecked); 
        break; 
       case 4: 
        changeVisibility(l4, isChecked); 
        break; 
      } 
     } 
    } 
} 
+0

Perché stai passando un 'LinearLayout' al tuo metodo 'changeVisibility (LinearLayout layout, boolean isChecked)' ma cambi solo la visibilità di un layout ogni volta? –

1
h.chk.setOnClickListener(new View.OnClickListener() 
{ 
    @Override 
    public void onClick(View view) 
    { 
     CheckBox chk=(CheckBox)view; // important line and code work 
     if(chk.isChecked()) 
     { 
      Message.message(a,"Clicked at"+position); 
     } 
     else 
     { 
      Message.message(a,"UnClick"); 
     } 
    } 
}); 
+0

Benvenuti in Stack Overflow! Puoi migliorare questa risposta [modificandolo] (http://stackoverflow.com/posts/39051766/edit) per spiegare come funziona. – dorukayhan