Android: चेकबॉक्स श्रोता


110

मैं एक से अधिक श्रोता रखना चाहता हूँ CheckBox। मैं जानकारी के लिए देखा और यह इस तरह है:

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

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

});

समस्या यह है कि ग्रहण सोचता है कि यह एक के OnCheckedChangeListenerलिए है RadioGroupऔर यह काम नहीं करता है। मैं इसे कैसे ठीक करूं?

जवाबों:


268

तुम यह केर सकते हो:

satView.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

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

       }
   }
);     

1
धन्यवाद और यहां बताया गया है कि इसे कैसे हटाया जाए: stackoverflow.com/questions/18881817/…
Michal

OnCheckedChangeListenerऔर CompoundButton.OnCheckedChangeListenerअलग हैं।
zionpi

के लिए kotlin satView.setOnCheckedChangeListener {buttonView, _ -> अगर (buttonView.isChecked) {// एक्शन} करना है, तो {// एक्शन परफॉर्म करें}}
अमीनुल हक Aome

48

आप एक सरल के लिए भी जा सकते हैं View.OnClickListener:

satView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        if(((CompoundButton) view).isChecked()){
            System.out.println("Checked");
        } else {
            System.out.println("Un-Checked");
        }
    }
});

1
यह वास्तव में केवल एक कार्यशील समाधान है जब मैं चेकबॉक्स क्लिक एक्शन सुनना चाहता था , न कि इसकी स्थिति जैसे अन्य समाधान वहां सुझाते हैं।
एक्यूना

19

आपको त्रुटि मिलती है क्योंकि आपने गलत पैकेज आयात किया है। आपको चाहिए import android.widget.CompoundButton.OnCheckedChangeListener;

तो कॉलबैक होना चाहिए:

        box.setOnCheckedChangeListener(new OnCheckedChangeListener() {

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

        }
    });

11

इसे इस्तेमाल करे:

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
          }
    }

});

उम्मीद है की यह मदद करेगा।


4

इसे इस्तेमाल करे

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

    });

4

के RadioGroup groupसाथ बदलें CompoundButton buttonViewऔर फिर अपने आयात को ठीक करने के लिए Ctrl + Shift + O दबाएं।


4

आप इस कोड का उपयोग कर सकते हैं।

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;
            }
        }
    }
}

आप 'LinearLayout' को अपने 'changeVisibility (LinearLayout लेआउट, बूलियन को कैसे चेक किया जाता है) पास कर रहे हैं' विधि अभी तक आप हर बार केवल एक लेआउट की दृश्यता बदल रहे हैं?
ब्रैडली विल्सन

4

क्रिस द्वारा कोटलिन में स्वीकृत उत्तर का अनुवाद:

val checkBox: CheckBox = findViewById(R.id.chk)
checkBox.setOnCheckedChangeListener { buttonView, isChecked ->
    // Code here 
}

1
नोट: यदि बटन दृश्य का उपयोग नहीं किया गया है: "{_, isChecked ->"
Elletlar

2
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");
        }
    }
});

1
ढेर अतिप्रवाह में आपका स्वागत है! आप इसे कैसे काम करते हैं यह समझाने के लिए इसे संपादित करके इस उत्तर को बेहतर बना सकते हैं ।
user8397947

1

यदि आप इंटरफ़ेस कार्यान्वयन के साथ कोटलिन में ऐसा करना चाह रहे हैं।

class MainActivity: AppCompatActivity(),CompoundButton.OnCheckedChangeListener{

 override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

      val yourCheckBox = findViewById<CheckBox>(R.id.check_box)
      yourCheckBox.setOnCheckedChangeListener(this)

    }

 override fun onCheckedChanged(buttonView: CompoundButton?, isChecked: Boolean) {
        when(buttonView?.id){
            R.id.check_box -> Log.d("Checked: ","$isChecked")
        }
    }

}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.