2011-12-05 18 views
68

Chcę umieścić słuchacza nad checkBox. Szukałem informacji i to jest tak:Android: odbiornik checkbox

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

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

    }); 

Problemem jest to, że Eclipse uważa, że ​​jest to OnCheckedChangeListener dla RadioGroup i to nie działa. Jak mogę to naprawić?

Odpowiedz

185

Można to zrobić:

satView.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

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

     } 
    } 
);  
+1

Dziękuję i tutaj jest jak go usunąć: http://stackoverflow.com/questions/18881817/removing-strikethrough-from-textview – Michal

+0

'' CompoundButton.OnCheckedChangeListener' OnCheckedChangeListener' i są różne. – zionpi

4

Zmień RadioGroup group z CompoundButton buttonView a następnie naciśnij Ctrl + Shift + O, aby naprawić importu.

3

spróbować

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

    }); 
6

Spróbuj tego:

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 
      } 

}); 

Nadzieja to pomaga ...

39

można też iść na prosty 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

To naprawdę tylko jedno działające rozwiązanie, kiedy chciałem wysłuchać checkboxa ** kliknij akcję **, a nie jego ** stan ** jak inne rozwiązania polecają tam. – Acuna

16

You dostaję błąd, ponieważ jesteś imp orted błędne package.You powinny import android.widget.CompoundButton.OnCheckedChangeListener;

Więc zwrotna powinna być:

 box.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

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

     } 
    }); 
4

Można użyć tego kodu.

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

Dlaczego przekazujesz "LinearLayout" do metody 'changeVisibility (LinearLayout layout, boolean isChecked)', ale zmieniasz widoczność tylko jednego layoutu za każdym razem? –

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

Witamy w Stack Overflow! Możesz poprawić tę odpowiedź, edytując ją (http://stackoverflow.com/posts/39051766/edit), aby wyjaśnić, jak działa. – dorukayhan

Powiązane problemy