2013-03-11 4 views
0

Я генерирую серию флажков динамически.Форсируйте динамически сгенерированные флажки, чтобы можно было выбрать только один.

enter image description here

я могу проверить любые один из флажка от:

enter image description here

Как вы можете снять проверенный флажок при нажатии на другой флажок?

отредактировал

здесь я добавляю свою реализацию RadioGroup и я получаю IllegalStateException окончательный LinearLayout firstRowTxtLayout = новый LinearLayout (fContext); первыйRowTxtLayout.setLayoutParams (новый LinearLayout.LayoutParams ( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT));

rbGroup.setLayoutParams(new LinearLayout.LayoutParams(
      LinearLayout.LayoutParams.WRAP_CONTENT, 
      LinearLayout.LayoutParams.WRAP_CONTENT)); 
    rbButton = new RadioButton(fContext); 
    rbButton.setLayoutParams(new LinearLayout.LayoutParams(
      LinearLayout.LayoutParams.WRAP_CONTENT, 
      LinearLayout.LayoutParams.WRAP_CONTENT)); 
    rbButton.setId(rbTagincreament); 
    rbGroup.addView(rbButton); 

тогда я добавляю этот RadioGroup в другой основной линейной компоновки

firstRowTxtLayout.addView(rbGroup); here i am getting the exception 
+1

использовать радио группу? – njzk2

+1

Используйте «RadioGroup», потому что он предоставляет только один вариант проверки! –

+0

на самом деле мое требование - это только флажок, и здесь я создаю все, что программно не использует какой-либо xml, это кросс-платформенная вещь. – Kris

ответ

1

Положите все ваши динамически созданные RadioButtons в массиве. и когда вы проверяете один из них, переходите все остальные и setChecked(false);

Как уже упоминалось, RadioGroup может быть решением. но по какой-то причине мне было трудно использовать, если вы хотите поместить другие объекты, такие как ImageViews или TextView между RadioButtons.

+1

«по какой-то причине» ... – njzk2

2

Получить ссылку на все флажки в разных переменных.

satView.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

    @Override 
    public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) { 
      if(isChecked) { 
      checkBox.setChecked(false); //Here call this method on all checkbox except you want to check single checkbox. 
     } 
    } 
} 

Но лучше использовать подход RadioGroup и RadioButton, поскольку Радио кнопки позволяют пользователю выбрать один вариант из множества. Прочитано here.

+0

Я согласен с RadioGroup, и я пробовал также.my-код немного другой, как я делаю без каких-либо xml. со списком getView Я показываю все свои взгляды. и когда я использую RadioGroup с макетом m gettin g java.lang.IllegalStateException: указанный ребенок уже имеет родителя. Сначала вы должны вызвать removeView() родителя ребенка. – Kris

4

enter image description here

Я использовал RadioGroup с пользовательским RadioButton, но я изменил RadioButton с флажком. Он будет вести себя как RadioButton, только только один выбор.

main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <LinearLayout 
     android:id="@+id/linearlayout" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" > 
    </LinearLayout> 

</LinearLayout> 

MainActivity.java

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     LinearLayout linear=(LinearLayout) findViewById(R.id.linearlayout); 

     final RadioButton[] rb = new RadioButton[5]; 
     RadioGroup rg = new RadioGroup(this); //create the RadioGroup 
     rg.setOrientation(RadioGroup.VERTICAL);//or RadioGroup.VERTICAL 
     for(int i=0; i<5; i++){ 
      rb[i] = new RadioButton(this); 
      rb[i].setButtonDrawable(R.drawable.single_radio_chice); 
      rg.addView(rb[i]); 

     } 
     LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(
       LinearLayout.LayoutParams.FILL_PARENT, 
       LinearLayout.LayoutParams.WRAP_CONTENT 
     ); 
     p.setMargins(10, 10, 10, 10); 
     linear.addView(rg,p); 

    } 

селектор

single_radio_chice

<?xml version="1.0" encoding="utf-8"?> 
    <selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:state_checked="false" 
     android:drawable="@drawable/check_off" /> 

    <item android:state_checked="true" 
     android:drawable="@drawable/check_on" /> 
</selector> 

Надеется, что это поможет.

+0

Привет, теперь я использовал RadioGroup для его реализации, теперь получаю 03-11 23: 12: 24.939: W/System.err (475): java.lang.IllegalStateException: указанный ребенок уже имеет родителя. Сначала вы должны вызвать removeView() родителя ребенка. – Kris

+0

@ Kris, пожалуйста, напишите код, в котором вы получаете эту ошибку? –

+0

yes .. здесь я добавляю свою RadioGroup к другому линейному расположению firstRowTxtLayout.addView (rbGroup); – Kris

Смежные вопросы