11
votes

What I'm trying to accomplish: When the user clicks a specific RadioButton, a TextView should appear immediately below the selected RadioButton.

My solution so far: Code-wise, put a TextView inside of the RadioGroup and set it's initial visibility to "invisible". Then, when a specific RadioButton is clicked, set the hidden TextView's visibility to "visible". When the RadioButton is unselected, hide the TextView. Setting the TextView's visiblity is done within an Activity class I've defined.

So, in my example XML code below, when "radio_button_one" is selected, "my_sometimes_hidden_textview" should appear. Conversely, when "radio_button_one" is deselected (or not selected), "my_sometimes_hidden_textview" should have it's visibility set to "invisible".

Question: Is putting the TextView inside of the RadioGroup valid (or, good practice)? If not, is there a better way to do what I'm trying to accomplish? I'm relatively new to Android development, so if there is something in the official Android documentation that I missed please point me to it. Thanks for the insight in advance.

main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:background="#FFFFFF"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <TextView
        android:id="@+id/my_always_visible_textview"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"
        android:text="This textview is always visible" />
    <RadioGroup
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:padding="10px">
        <RadioButton
            android:id="@+id/radio_button_one"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Radio Button 1" />
        <TextView
            android:id="@+id/my_sometimes_hidden_textview"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="This should only appear when radio_button_one is selected" />
        <RadioButton
            android:id="@+id/radio_button_two"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Radio Button 2" />
    </RadioGroup>
</LinearLayout>

Thank you for the replies, CommonsWare and Macarse.

CommonsWare: Thanks for clarifying that a RadioGroup is a type of LinearLayout. My instincts fought against adding the TextView because most RadioGroup examples I've come across to date don't show elements other than RadioButtons present. Hence, I thought that only RadioButtons should go in RadioGroups.

Macarse:

  1. I tried placing the TextView outside of the RadioGroup, just as you described. Your solution does work, so long as a programmer doesn't need the TextArea to appear immediately below a specific RadioButton. I haven't been able to figure out how to position the TextArea immediately below the specific RadioButton without explicitly placing the TextView inside of the RadioGroup.

  2. Thanks for the ViewStub link. In fact, this may be the best way to accomplish what I'm trying to do overall. Along with the TextView I talked about in my question, I also wanted to add a button to appear next to the TextView only when a specific RadioButton was selected.

3

3 Answers

24
votes

Is putting the TextView inside of the RadioGroup valid (or, good practice)?

RadioGroup is just a LinearLayout that happens to also handle RadioButton exclusion rules (i.e., "there can only be one...checked, that is"). I see no particular problems in having a TextView inside a RadioGroup.

2
votes

Two options:

  1. Doing something similar as you said but it doesn't need to be inside the RadioGroup. Making the TextView visible when the user clicks on the RadioButton.
  2. Perhaps you can do something with a ViewStub. Check this link.
0
votes

yeah it is possible check this method

<RadioGroup
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/radioGroup"
    android:orientation="horizontal">

    <RadioButton
        android:id="@+id/ifsc"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/ifsc"
        android:textAllCaps="true" />
    <Textview
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/appName"
        android:id="@+id/ifsc_info"
        android:baselineAlignBottom="true"
        android:layout_toEndOf="@+id/ifsc" />

</RadioGroup>