2017-04-22 48 views
0

我有4 RadioButtons安排是這樣的:我怎麼能把RadioButtons作爲他們RadioGroup的孫子們的好方法?

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <RadioGroup 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical"> 

      <LinearLayout 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:orientation="horizontal" 
       android:weightSum="2"> 

       <RadioButton 
        android:id="@+id/button1" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_weight="1" 
        android:text="Button 1"/> 

       <RadioButton 
        android:id="@+id/button2" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_weight="1" 
        android:text="Button 2"/> 

      </LinearLayout> 

      <LinearLayout 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:orientation="horizontal" 
       android:weightSum="2"> 

       <RadioButton 
        android:id="@+id/button3" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_weight="1" 
        android:text="Button 3"/> 

       <RadioButton 
        android:id="@+id/button4" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_weight="1" 
        android:text="Button 4"/> 
      </LinearLayout> 

     </LinearLayout> 

    </RadioGroup> 

</RelativeLayout> 

我的問題是,現在每RadioButton可按壓選擇在一起。這不應該發生。必須始終選擇一個或零個RadioButtons,而不是多個。在正常的RadioGroup中,不會發生此問題。我認爲這是因爲其中的LinearLayout's,但我需要他們爲我的應用程序的其餘部分。我怎麼解決這個問題?

我怎樣才能把RadioButtons作爲孫輩從他們的RadioGroup好方法?

+0

儘量避免這種做法。這會增加ViewHierachy。並且以編程方式處理選擇將非常笨拙。相反,你按照我的答案。希望你能得到你想要的。 :) – MMBarno

回答

1

當您使用LinearLayoutRadioGroupRadioGroup失去其基本functionalitytoggle按鈕states而且其覆蓋方法onCheckedChanged()永遠不會被調用。

要解決此問題,您必須更改RadioButton狀態programmatically

這裏是一個完整的解決方案:

public class RadioGroupActivity extends AppCompatActivity implements RadioButton.OnCheckedChangeListener { 

    RadioGroup radioGroup; 
    RadioButton radioButton1; 
    RadioButton radioButton2; 
    RadioButton radioButton3; 
    RadioButton radioButton4; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_radio_group); 

     getSupportActionBar().setTitle("Hello Android"); 

     radioGroup = (RadioGroup) findViewById(R.id.radioGroup); 
     radioButton1 = (RadioButton) findViewById(R.id.button1); 
     radioButton2 = (RadioButton) findViewById(R.id.button2); 
     radioButton3 = (RadioButton) findViewById(R.id.button3); 
     radioButton4 = (RadioButton) findViewById(R.id.button4); 

     radioButton1.setOnCheckedChangeListener(this); 
     radioButton2.setOnCheckedChangeListener(this); 
     radioButton3.setOnCheckedChangeListener(this); 
     radioButton4.setOnCheckedChangeListener(this); 
    } 

    @Override 
    public void onCheckedChanged(CompoundButton compoundButton, boolean status) { 
     if (status) 
     { 
      switch (compoundButton.getId()) { 
       case R.id.button1: 
        radioButton2.setChecked(false); radioButton3.setChecked(false); radioButton4.setChecked(false); 

        // Do something 
        Toast.makeText(getApplicationContext(), radioButton1.getText() + " clicked", Toast.LENGTH_SHORT).show(); 
        break; 

       case R.id.button2: 
        radioButton1.setChecked(false); radioButton3.setChecked(false); radioButton4.setChecked(false); 

        // Do something 
        Toast.makeText(getApplicationContext(), radioButton2.getText() + " clicked", Toast.LENGTH_SHORT).show(); 
        break; 

       case R.id.button3: 
        radioButton1.setChecked(false); radioButton2.setChecked(false); radioButton4.setChecked(false); 

        // Do something 
        Toast.makeText(getApplicationContext(), radioButton3.getText() + " clicked", Toast.LENGTH_SHORT).show(); 
        break; 

       case R.id.button4: 
        radioButton1.setChecked(false); radioButton2.setChecked(false); radioButton3.setChecked(false); 

        // Do something 
        Toast.makeText(getApplicationContext(), radioButton4.getText() + " clicked", Toast.LENGTH_SHORT).show(); 
        break; 
      } 
     } 

    } 
} 

OUTPUT:

enter image description here

希望這將有助於〜

+0

我想他是在談論安排radiobuttons ..在佈局...有效率 – rafsanahmad007

2

我建議你不要通過在RadioGroup中使用嵌套的嵌套佈局(線性/相對)來增加查看層次結構。你也不會使用嵌套佈局獲得單一選擇功能。 RadioGroup實際上擴展了LinearLayout。所以它只具有垂直或水平排列RadioButton的能力。在這裏,我分享了我的庫的鏈接 RelativeRadioGroup ,它實際上是一個RelativeRadioGroup,因此您可以根據需要安排RadioButton,並且特別選擇不會受到影響。

0

您不能在RadioGroup中放置任何其他佈局。所以如果你仍然想把所有的RadioButton都放到線性佈局中,你就不得不做很少的額外工作。

以編程方式執行此操作,當選中任何一個RadioButton時,將其他人取消選中。

喜歡的東西

RadioButton rbu1 =(RadioButton)findViewById(R.id.radio0); 
RadioButton rbu2 =(RadioButton)findViewById(R.id.radio1); 
rbu1.setOnClickListener(first_radio_listener); 
rbu2.setOnClickListener(second_radio_listener); 
OnClickListener first_radio_listener = new OnClickListener(){ 
public void onClick(View v) { 
    rbu2.setChecked(false); 
} 
}; 
OnClickListener second_radio_listener = new OnClickListener(){ 
public void onClick(View v) { 
    rbu1.setChecked(false); 
} 
}; 
相關問題