Android'de bir RadioGroup'un seçili dizinini alma


213

Android'de bir RadioGroup dizinini almanın kolay bir yolu var mı veya değişiklikleri dinlemek ve son dizini seçen bir şeyi tutmak için OnCheckedChangeListener'ı kullanmak zorunda mıyım?

örnek xml:

<RadioGroup android:id="@+id/group1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical">
    <RadioButton android:id="@+id/radio1" android:text="option 1" android:layout_width="wrap_content" android:layout_height="wrap_content" />
    <RadioButton android:id="@+id/radio2" android:text="option 2" android:layout_width="wrap_content" android:layout_height="wrap_content" />
    <RadioButton android:id="@+id/radio3" android:text="option 3" android:layout_width="wrap_content" android:layout_height="wrap_content" />
    <RadioButton android:id="@+id/radio4" android:text="option 4" android:layout_width="wrap_content" android:layout_height="wrap_content" />
    <RadioButton android:id="@+id/radio5" android:text="option 5" android:layout_width="wrap_content" android:layout_height="wrap_content" />
</RadioGroup>

Bir kullanıcı option 3dizini almak istediğimi seçerse , 2.

Yanıtlar:


479

Bunun gibi bir şey yapabilmelisiniz:

int radioButtonID = radioButtonGroup.getCheckedRadioButtonId();
View radioButton = radioButtonGroup.findViewById(radioButtonID);
int idx = radioButtonGroup.indexOfChild(radioButton);

Eğer RadioGroup(a gibi diğer Görüntüleme içerir TextView) daha sonra indexOfChild()yöntem yanlış endeksi dönecektir.

Seçilen RadioButtonmetni şurada almak için RadioGroup:

 RadioButton r = (RadioButton) radioButtonGroup.getChildAt(idx);
 String selectedtext = r.getText().toString();

11
Ancak bu düğmelerin android:idöznitelikleri ayarlanmamışsa ne olur ?
neuront

@BP Üst veya radyo düğmesi kimliği ayarlanmadığında radyo düğmelerine erişme konusunda aynı şüpheye sahibim.
Katil

2
@neuront radioGroup.findViewById (radioButtonID) yaptığınız sürece çalışır. RadioGroup seti 1, 2, 3, 4 içermez ve bu nedenle üzerinde size 's kapsamında onları aramak yoksa öylesine, bu ödeme şekli görünümün kimlikleri gibi
Reinherd

Varsayılan (ve Kullanıcı tarafından dokunulmamış) RadioButton öğesi ayarlanmışsa bu çalışmaz.
Ninja Kodlama

2
@NinjaCoding Benimle aynı hatayı yaptıysanız, radioButton.setChecked (true) öğesini değil, radioGroup.check (selectedRadioButton.id) öğesini çağırarak varsayılan (ilk) radyo düğmesini ayarlamanız gerekir.
Lensflare

108

Bu çalışmalı,

int index = myRadioGroup.indexOfChild(findViewById(myRadioGroup.getCheckedRadioButtonId()));

5
Parça içinde kullanıyorsanız getActivity (). FindViewById () kullanın.
Sanjeet A

56

Radyo grubuna bir referansınız olabilir getCheckedRadioButtonId ()ve işaretli radyo düğmesi kimliğini almak için kullanabilirsiniz . Buraya bir bak

RadioGroup radioGroup = (RadioGroup)findViewById(R.id.radio_group);

Ardından, seçilen radyo seçeneğini almanız gerektiğinde.

int checkedRadioButtonId = radioGroup.getCheckedRadioButtonId();
if (checkedRadioButtonId == -1) {
    // No item selected
}
else{
    if (checkedRadioButtonId == R.id.radio_button1) {
        // Do something with the button
    }
}

evet, bu işaretli radyo düğmesinin kimliği, ama radyo grubundaki radyo düğmesinin dizini ne olacak?
John Boker

id alabilirsiniz, dizin istiyorum, onlar farklı.
John Boker

dizine göre ne demek istiyorsun? liste görünümünde mi?
Stefan Bossbaly

radyo grubunda 5 radyo düğmesi varsa ve kullanıcı 2 almak istediğim 3 radyo düğmesini seçerse, radyo grubunda seçilen radyo düğmesinin dizini. bu bir liste görünümü değildir.
John Boker

sadece kullanıcının 2. düğmeyi almak istediğiniz düğmeyi seçip seçmediğini netleştirmek için? radyo gruplarının ve düğmelerinin indeksleri yoktur.
Stefan Bossbaly

27

bunu dene

        RadioGroup  group= (RadioGroup) getView().findViewById(R.id.radioGroup);
        group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup radioGroup, int i) {
                View radioButton = radioGroup.findViewById(i);
                int index = radioGroup.indexOfChild(radioButton);
            }
        });

Bu işe yarıyor! Ama neden bu "
radioButton


9

Kullanabilirsiniz:

RadioButton rb = (RadioButton) findViewById(rg.getCheckedRadioButtonId());

6

// seçilen öğenin kimliğini almak için kullanın

int selectedID = myRadioGroup.getCheckedRadioButtonId();

// seçilen öğenin görünümünü elde et

View selectedView = (View)findViewById( selectedID);

6

Bu şekilde benim için mükemmel çalıştı:

    RadioGroup radioGroup = (RadioGroup) findViewById(R.id.radio_group);
    int radioButtonID = radioGroup.getCheckedRadioButtonId();
    RadioButton radioButton = (RadioButton) radioGroup.findViewById(radioButtonID);
    String selectedtext = (String) radioButton.getText();

5

Tek ihtiyacınız olan değerleri önce RadioButton'ınıza ayarlamaktır, örneğin:

RadioButton radioButton = (RadioButton)findViewById(R.id.radioButton);      
radioButton.setId(1);        //some int value

ve ne zaman bu spacific radioButton seçilirse, değerini verdiğiniz Kimlik ile alabilirsiniz

RadioGroup radioGroup = (RadioGroup)findViewById(R.id.radioGroup);                     
int whichIndex = radioGroup.getCheckedRadioButtonId(); //of course the radioButton
                                                       //should be inside the "radioGroup"
                                                       //in the XML

Şerefe!


5
radioSexGroup=(RadioGroup)findViewById(R.id.radioGroup);

  btnDisplay=(Button)findViewById(R.id.button);

  btnDisplay.setOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View v) {
        int selectedId=radioSexGroup.getCheckedRadioButtonId();
        radioSexButton=(RadioButton)findViewById(selectedId);
        Toast.makeText(MainActivity.this,radioSexButton.getText(),Toast.LENGTH_SHORT).show();
     }
  });


2

sadece şunu kullanın:

    int index = 2;
    boolean option3Checked = radioGroup.getCheckedRadioButtonId() == radioGroup.getChildAt(2).getId();

1

yapabilirsin

findViewById

radyo grubundan.

İşte örnek:

((RadioButton)my_radio_group.findViewById(R.id.radiobtn_veg)).setChecked(true);

1

Basitçe yapabilirsiniz

- Radyo grubunu ve bir radyo düğmesini onCreate yönteminden bildirin

private RadioGroup GrupName;
private RadioButton NameButton;

-onCreate yönteminde görünüm kimliğini ayarlama

GrupName = (RadioGroup) findViewById(R.id.radioGroupid);

- ile seçilen radyo düğmesi kimliğini kullanın

int id = GroupName.getCheckedRadioButtonId();

- düğmeyi seçilen görünüme uyması için kimliği kullanın

NameButton = (RadioButton) findViewById(id);

- son olarak radyo düğmesinin değerini alın

String valueExpected = NameButton.getText().toString();

--- PS: INT DEĞERİ İSTİYORSANIZ

int valueExpectedIn = Integer.parseInt(valueExpected);

1

Grubunuzda bir TextView veya RadioButton olmayan bir tane olsa bile doğru konumu elde etmek için bir Kotlin uzantısı var .

fun RadioGroup.getCheckedRadioButtonPosition(): Int {
    val radioButtonId = checkedRadioButtonId
    return children.filter { it is RadioButton }
        .mapIndexed { index: Int, view: View ->
            index to view
        }.firstOrNull {
            it.second.id == radioButtonId
        }?.first ?: -1
}

0

Kotlin:

val selectedIndex = radioButtonGroup?.indexOfChild(
  radioButtonGroup?.findViewById(
    radioButtonGroup.getCheckedRadioButtonId())
)

0
radioSexGroup = (RadioGroup) findViewById(R.id.radioSex);
btnDisplay = (Button) findViewById(R.id.btnDisplay);
btnDisplay.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            // get selected radio button from radioGroup
            int selectedId = radioSexGroup.getCheckedRadioButtonId();
            // find the radiobutton by returned id
            radioSexButton = (RadioButton) findViewById(selectedId);
Toast.makeText(MainActivity.this,radioSexButton.getText(),Toast.LENGTH_SHORT).show();
        }
    });
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.