Bir Android RadioGroup'un seçili dizinini ayarla


97

Alt radyo düğmeleri arasında döngü yapmak ve seçili dizindeki radyo düğmesini kontrol etmek dışında, bir RadioGroup'un seçilen dizinini android'de ayarlamanın bir yolu var mı?

Not: Radyo Düğmesi Grubunu çalışma zamanında dolduruyorum.

Yanıtlar:


207

Radyo grubunuz bir düzen xml dosyasında tanımlanmışsa, her düğmeye bir kimlik atanabilir. Sonra bunun gibi bir düğmeyi kontrol et

radioGroup.check(R.id.myButtonId);

Radyo grubunuzu programlı olarak oluşturduysanız (bunu nasıl yapacağınızdan bile emin değilim ...), R.id. * kimlikleri atayabilmek için yalnızca radyo grubu için özel bir düzen xml dosyası oluşturmayı düşünebilirsiniz. düğmelere.

Aslında, radyo düğmesi grubunu dizine göre ayarlamak istiyorsanız, lütfen aşağıdaki yanıta bakın, aşağıdaki yanıta bakın.

((RadioButton)radioGroup.getChildAt(index)).setChecked(true);

2
Merhaba, bu kodu kullanarak programlı olarak oluşturdum: for (int i = 0; i <lookupTypes.size (); i ++) {// RadioButton rbt = new RadioButton (this); //, null, // R.style. RadioGroupItem); RadioButton rbt = (RadioButton) getLayoutInflater (). İnflate (R.layout.tmpltradiobutton, null); rbt.setId (i); rbt.setText (lookupTypes.get (i) .getValue ()); rbt.setTag (lookupTypes.get (i)); rbtnGroup.addView (rbt); }
Hassan Mokdad

LookupTypes'te onların kimliklerini dizine ayarladığınız için, bu dizini checkyöntemin bağımsız değişkeni olarak kullanabilirsiniz .
jjm

bu cevap kelimenin tam anlamıyla soruyu soran kişinin daha önce ne ifade ettiğini tekrar açıklar - diğer cevap, indekse göre nasıl seçileceğini doğru bir şekilde söylediği için kabul edilen cevap olmalıdır.
Lassi Kinnunen

@LassiKinnunen Bu yanıttaki olumlu oyların sayısının insanların ondan ihtiyaç duyduklarını aldıklarını düşündüğünü düşünüyorum ... bu, sorulan soru için diğer cevabın daha doğru olduğunu söyledi: - /
jjm

2
Dürüst olmak gerekirse, bunun en yüksek oyu alan SO cevabım olduğu için biraz utanıyorum.
jjm

87

Soru "seçili INDEX'i ayarla" dedi, işte onu dizine göre nasıl ayarlayacağınız:

((RadioButton)radioGroup.getChildAt(index)).setChecked(true);

........

Ek bilgi: Görünüşe göre Google, dizin yerine kimlik kullanmanızı istiyor, çünkü id kullanmak daha fazla hata kanıtı. Örneğin, RadioGroup'unuzda başka bir UI öğeniz varsa veya başka bir geliştirici RadioButton'ları yeniden sipariş ederse, endeksler değişebilir ve beklediğiniz gibi olmayabilir. Ancak tek geliştirici sizseniz, bu tamamen sorun değil.


Bu kodu, nasıl doğru cevap olduğunu açıklayabilir misiniz?
rfornal

1
@rfornal bu kod, radyo düğmesini View id (R.id.radioButton1 gibi) yerine INDEX ile yakalamanıza izin verir ve dizini görünüm kimliğine dönüştürmek için bir arama tablosu uygulama ihtiyacını azaltır.
Siavash

5

FindViewById'i radyo grubundan yapabilirsiniz.

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

5

Siavash'ın cevabı doğru:

((RadioButton)radioGroup.getChildAt(index)).setChecked(true);

Ancak bir radioGroup'un radioButtons dışında görünümler içerebileceğini unutmayın - bu örnekte olduğu gibi her seçimin altında soluk bir çizgi bulunur.

<RadioGroup
    android:id="@+id/radioKb"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <RadioButton
        android:id="@+id/kb1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:button="@null"
        android:drawableRight="@android:drawable/btn_radio"
        android:text="Onscreen - ABC" />

    <View
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:background="#33000000" />

    <RadioButton
        android:id="@+id/kb2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:button="@null"
        android:drawableRight="@android:drawable/btn_radio"
        android:text="Onscreen - Qwerty" />

    <View
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:background="#33000000" />

    <RadioButton
        android:id="@+id/kb3"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:button="@null"
        android:drawableRight="@android:drawable/btn_radio"
        android:text="Standard softkey" />

    <View
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:background="#33000000" />

    <RadioButton
        android:id="@+id/kb4"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:button="@null"
        android:drawableRight="@android:drawable/btn_radio"
        android:text="Physical keyboard" />

    <View
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:background="#33000000" />

</RadioGroup>

Bu durumda, örneğin 1 indeksinin kullanılması bir hata oluşturacaktır. Dizin 1'deki öğe, bir radioButton değil, ilk ayırıcı çizgidir. Bu örnekteki radioButton'lar 0, 2, 4, 6 dizinlerindedir.


2

Bu Benim İçin Çalıştı, radyo düğmesini dinamik olarak oluşturdum.

  private void createRadioButton() {

    RadioButton[] rb = new RadioButton[5];

    RadioGroup.LayoutParams layoutParams = new RadioGroup.LayoutParams(
            ViewGroup.LayoutParams.WRAP_CONTENT,
            ViewGroup.LayoutParams.WRAP_CONTENT,
            1.0f);

    radioGroup.setOrientation(RadioGroup.HORIZONTAL);

    for (int ID = 0; ID < 5; ID++) {
        rb[ID] = new RadioButton(this);
        rb[ID].setLayoutParams(layoutParams);
        rb[ID].setText("Button_Text");
        radioGroup.addView(rb[ID]); //the RadioButtons are added to the radioGroup instead of the layout
    }
}

Şimdi kullanarak bir düğmeyi kontrol edin,

int radio_button_Id = radioGroup.getChildAt(index).getId();

radioGroup.check( radio_button_Id );

0

OnBindViewHolder'ın içinde etiketi Düğme Grubu olarak ayarlayın

@Override
public void onBindViewHolder(final CustomViewHolder holder, final int position) {
   ...
   holder.ButtonGroup.setTag(position);
}

ve ViewHolder'da

ButtonGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(RadioGroup radioGroup, int checkedId) {
        ...
        int id = radioGroup.getCheckedRadioButtonId();

        RadioButton radioButton = (RadioButton) radioGroup.findViewById(id);

        int clickedPos = (Integer) radioGroup.getTag();

        packageModelList.get(clickedPos).getPoll_quest()
    }

0

Kotlin'i kullanarak bunu yapabilirsiniz

  (radio_group_id.getChildAt(index) as RadioButton).isChecked = true

veya

radio_group_id.check(R.id.radio_button_id)

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.