2011-12-05 17 views
68

Quiero poner un Listener sobre un checkbox. Busqué información y es de esta manera:Android: listener listener

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

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

    }); 

El problema es que Eclipse piensa que es un OnCheckedChangeListener para un RadioGroup y no funciona. ¿Cómo puedo arreglar esto?

Respuesta

185

Usted puede hacer esto:

satView.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

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

     } 
    } 
);  
+1

Gracias y aquí es cómo quitarlo: http://stackoverflow.com/questions/18881817/removing-strikethrough-from-textview – Michal

+0

'' OnCheckedChangeListener' y son CompoundButton.OnCheckedChangeListener' diferente. – zionpi

4

Cambio RadioGroup group con CompoundButton buttonView y pulse Ctrl + Shift + O para arreglar sus importaciones.

3

probar esto

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

    }); 
6

Prueba esto:

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 
      } 

}); 

Espero que esto ayude ...

39

también puede ir para un simple 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

Realmente es solo una solución de trabajo cuando quería escuchar una casilla de verificación ** hacer clic en acción **, no su ** estado ** como otras soluciones recomiendan allí. – Acuna

16

Usted obtener el error porque imp package.You equivocadas orted deben import android.widget.CompoundButton.OnCheckedChangeListener;

Así que la devolución de llamada deben ser:

 box.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

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

     } 
    }); 
4

Usted podría utilizar este código.

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

¿Por qué está pasando un 'LinearLayout' a su método 'changeVisibility (LinearLayout layout, boolean isChecked)' pero solo está cambiando la visibilidad de un diseño cada vez? –

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

¡Bienvenido a Stack Overflow! Puede mejorar esta respuesta editando [http://stackoverflow.com/posts/39051766/edit] para explicar cómo funciona. – dorukayhan

Cuestiones relacionadas