2016-10-18 2 views
2

Я пытаюсь создать 2 ряда радио-кнопок, как на картинке ниже. Но моя радио группа не работает, когда я прямо поставил ее выше LinearLayout.Android RadioGroup не работает

Я новичок в разработке Android. Поэтому, если есть лучшие альтернативы. Они радушны

enter image description here

Мой код

<RadioGroup 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical"> 
    <LinearLayout 
     android:orientation="horizontal" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/linearLayout2" 
     android:background="@android:color/holo_blue_dark"> 
     <RadioButton 
      android:text="1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/radioButton33" /> 
     <RadioButton 
      android:text="2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/radioButton34" /> 
     <RadioButton 
      android:text="3" 
      android:layout_width="wrap_content" 
      android:layout_height="match_parent" 
      android:id="@+id/radioButton35" /> 
     <RadioButton 
      android:text="4" 
      android:layout_width="wrap_content" 
      android:layout_height="match_parent" 
      android:id="@+id/radioButton36" /> 
     <RadioButton 
      android:text="5" 
      android:layout_width="wrap_content" 
      android:layout_height="match_parent" 
      android:id="@+id/radioButton37" /> 
     <RadioButton 
      android:text="6" 
      android:layout_width="wrap_content" 
      android:layout_height="match_parent" 
      android:id="@+id/radioButton38" /> 
     <RadioButton 
      android:text="7" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:id="@+id/radioButton39" 
      android:layout_marginRight="1.0dp" /> 
    </LinearLayout> 
    <LinearLayout 
     android:orientation="horizontal" 
     android:minWidth="25px" 
     android:minHeight="25px" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/linearLayout3" 
     android:background="@android:color/holo_blue_dark"> 
     <RadioButton 
      android:text="8" 
      android:layout_width="wrap_content" 
      android:layout_height="match_parent" 
      android:id="@+id/radioButton40" /> 
     <RadioButton 
      android:text="9" 
      android:layout_width="wrap_content" 
      android:layout_height="match_parent" 
      android:id="@+id/radioButton41" /> 
     <RadioButton 
      android:text="10" 
      android:layout_width="wrap_content" 
      android:layout_height="match_parent" 
      android:id="@+id/radioButton42" /> 
     <RadioButton 
      android:text="11" 
      android:layout_width="wrap_content" 
      android:layout_height="match_parent" 
      android:id="@+id/radioButton43" /> 
     <RadioButton 
      android:text="12" 
      android:layout_width="wrap_content" 
      android:layout_height="match_parent" 
      android:id="@+id/radioButton44" /> 
     <RadioButton 
      android:text="13" 
      android:layout_width="wrap_content" 
      android:layout_height="match_parent" 
      android:id="@+id/radioButton45" /> 
     <RadioButton 
      android:text="14" 
      android:layout_width="wrap_content" 
      android:layout_height="match_parent" 
      android:id="@+id/radioButton46" /> 
    </LinearLayout> 
</RadioGroup> 

Благодаря

+2

Корневая компоновка Radio Button должна быть RadioGroup, иначе она будет работать независимо. –

+0

вам не нужно использовать линейную раскладку ... укажите андроид: ориентация в группе радио ... посетите http://stackoverflow.com/questions/15005551/androidplacing-the-radio-buttons-horizontally –

+0

Проверьте это http: //stackoverflow.com/questions/17258573/multiple-row-radio-buttons-in-android – vidulaJ

ответ

1

Вы можете создать 2 Радио группы и обрабатывать все от RadioButtonCliked Event как этот пример

public void RadioButtonClicked(View view) { 
    boolean checked = ((RadioButton) view).isChecked(); 

    switch(view.getId()) { 
     case R.id.radioButton33: { 
      NameRadioGroup2.clearCheck(); 
      NameRadioGroup1.check(view.getId()); 
      break; 
     } 

     case R.id.radioButton40: { 
      NameRadioGroup1.clearCheck(); 
      NameRadioGroup2.check(view.getId());   
      break; 
     } 
     {here implement cases for other radio buttons} 
} 


или

public void RadioButtonClicked(View view) { 
    boolean checked = ((RadioButton) view).isChecked(); 
    if(ButtonFromRadioGroupOne(view.getId()) 
    { 
     NameRadioGroup2.clearCheck(); 
     NameRadioGroup1.check(view.getId()); 
    } 
    else 
    { 
     NameRadioGroup1.clearCheck(); 
     NameRadioGroup2.check(view.getId()); 
    } 
} 

private bool ButtonFromRadioGroupOne(int id) 
{ 
    return id == R.id.radioButton33 || id == R.id.radioButton34 || id == R.id.radioButton35 || id == R.id.radioButton36 || id == R.id.radioButton37 || id == R.id.radioButton38 || id == R.id.radioButton39; 
} 

или вы можете иметь 2 RadioButtonClicked события для каждой группы радио.

public void RadioButtonClicked1(View view) { 
    RadioButtonClicked(NameRadioGroup1, NameRadioGroup2, view); 
} 

public void RadioButtonClicked2(View view) { 
    RadioButtonClicked(NameRadioGroup2, NameRadioGroup1, view); 
} 

public void RadioButtonClicked(RadioGroup selected, RadioGroup cleared, View view) { 
    boolean checked = ((RadioButton) view).isChecked(); 
    cleared.clearCheck(); 
    selected.check(view.getId()); 
}  
+0

Это дало бы мне очень большой переключатель. Разве нет лучшего способа сделать это? –

+0

Я добавил другое решение без переключателя – gmetax

0

Я установил его

Сначала я создал метод расширения, чтобы получить тэ ребенка от View

static class Extention 
    { 
     public static List<T> Childs<T>(this ViewGroup view) where T : View 
     { 
      List<T> childs = new List<T>(); 
      for (int i = 0; i < view.ChildCount; i++) 
      { 
       var selectedView = view.GetChildAt(i) as T; 
       if (view != null) 
       { 
        childs.Add(selectedView); 
       } 
      } 
      return childs; 
     } 
    } 

Я добавил этот код в мой главный

LinearLayout Layout2 = FindViewById<LinearLayout>(Resource.Id.linearLayout2); 
      LinearLayout Layout3 = FindViewById<LinearLayout>(Resource.Id.linearLayout3); 
      Buttons = Layout2.Childs<RadioButton>(); 
      Buttons.AddRange(Layout3.Childs<RadioButton>()); 
      foreach(RadioButton button in Buttons) 
      { 
       button.CheckedChange += RadioButton_Check; 
      } 

И это это мое мероприятие

public bool InUse = false; 
     private void RadioButton_Check(object sender, CompoundButton.CheckedChangeEventArgs e) 
     { 
      if (InUse) return; 
      InUse = true; 
      RadioButton Senderbutton = sender as RadioButton; 
      foreach (RadioButton button in Buttons) 
      { 
       button.Checked = false; 
      } 
      Senderbutton.Checked = true; 
      InUse = false; 
     } 
Смежные вопросы