web-dev-qa-db-ger.com

android onCheckedChanged für Radiogruppe

Ich schreibe eine Activity in Android, bei der ich zwei Radioknöpfe unter einer Radiogruppe habe. Eine davon ist standardmäßig aktiviert. Ich kann das Ereignis jedoch nicht in der onCreate-Methode auslösen, damit ich etwas tun kann. Die onCheckedChanged läuft einwandfrei, wenn Sie darauf klicken.

RadioGroup ItemtypeGroup = (RadioGroup) findViewById(R.id.rechargeItemtype);
    RadioButton providerRadio = (RadioButton) findViewById(R.id.a);
    providerRadio.performClick();

    ItemtypeGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged (RadioGroup group,int checkedId){

            Log.d("chk", "id" + checkedId);

            if (checkedId == R.id.a) {
                //some code
            } else if (checkedId == R.id.b) {
                //some code
            }
        }
    });
22
user2534310

Aktivieren eines Kontrollkästchens für den Standard bei der Initialisierung. Setzen Sie mit der clearCheck-Methode alles auf Deaktiviert, legen Sie dann den Handler fest, und legen Sie den Standard fest.

itemtypeGroup.clearCheck();

dann wie üblich einen Listener hinzufügen ...

itemtypeGroup
        .setOnCheckedChangeListener(new OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
Log.d("chk", "id" + checkedId);

                if (checkedId == R.id.a) {
                    //some code
                } else if (checkedId == R.id.b) {
                    //some code
                }

            }

        });

Aktivieren Sie dann das Standard-Optionsfeld, und der Listener wird ausgelöst.

rb = (RadioButton) view.findViewById(R.id.a);
rb.setChecked(true);

Viel Glück

40
danny117
 radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {

            if (checkedId == R.id.radioButton1) {
             //do work when radioButton1 is active
            } else  if (checkedId == R.id.radioButton2) {
             //do work when radioButton2 is active
          } else  if (checkedId == R.id.radioButton3) {
             //do work when radioButton3 is active
          }

        }
    });

diese Arbeit für mich. Hoffnung ist hilfreich

7
Maysam R

Versuchen Sie diesen Code.

Deklarieren Sie diesen Code in Ihrer onCreate-Methode.

    RadioGroup radioGroup = (RadioGroup) findViewById(R.id.radiogroup);
    radioGroup.clearCheck();
    radioGroup.setOnCheckedChangeListener(new  RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {

            RadioButton rb = (RadioButton) group.findViewById(checkedId);
            if (null != rb && checkedId > -1) {

                // checkedId is the RadioButton selected
                switch (checkedId) {
                    case R.id.one:
                     // Do Something
                      break;

                    case R.id.two:
                    // Do Something
                      break;   

                    case R.id.three:
                    // Do Something   
                        break;
                }
            }
        }

    });

Hoffe das hilft.

4
The Hawk

Das Problem ist, dass Sie OnCheckedChangeListener on RadioGroup nach dem providerRadio.performClick(); Methodenaufruf einstellen.

Wenn die providerRadio.performClick();-Methode bis dahin ausgeführt wird, ist daher keine OnCheckedChangeListener verfügbar. Damit dies funktioniert, müssen Sie Listener vor dem Aufruf der performClick()-Methode festlegen.

Statt RadioButton.performClick() zu verwenden, sollten Sie die RadioGroup.check()-Methode verwenden, um die aktuell geprüfte RadioButton zu ändern.

Sie können diesen Code also verwenden, um die aktuelle Auswahl der Radiogruppe zu ändern

RadioGroup ItemtypeGroup = (RadioGroup) findViewById(R.id.rechargeItemtype);
ItemtypeGroup
        .setOnCheckedChangeListener(new OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                Log.d("chk", "id" + checkedId);

                if (checkedId == R.id.a) {
                    //some code
                } else if (checkedId == R.id.b) {
                    //some code
                }

            }

        });
ItemtypeGroup.check(R.id.a);

Hinweis : - Stellen Sie sicher, dass Sie RadioGroup.check() nach dem Hinzufügen von OnCheckedChangeListener wie oben im Codeausschnitt aufrufen.

2
Akhilesh Kumar

Ich denke, Sie führen einen Klick durch, bevor Sie den Listener auf die Gruppe setzen. Deshalb wird das Ereignis nicht ausgelöst.

0
Ruman