NestedRadioGroup
RadioGroup which don't lose state with inner ViewGroup
You can add ViewGroup into RadioGroup to get complex views with RadioButtons.
Usage
Add it in your root build.gradle at the end of repositories
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
dependencies {
implementation 'com.github.Jamshid-M:NestedRadioGroup:1.1'
}
Attributes
Only one attribute for disabling or enabling unselecting mode
Just specify flag in NestedRadioGroup
app:unselectable="true"
Open your project and setup NestedRadioGroup in your xml file, and add ViewGroups inside of RadioGroup.
You have to include RadioButton inside of every ViewGroup or you will get an excetion with You need to add radio button inside of NestedRadioGroup message
<uz.jamshid.libarary.NestedRadioGroup
android:id="@+id/rg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_margin="16dp"
app:unselectable="true"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RadioButton
android:id="@+id/rb1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="false"
/>
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Voice"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/ic_btn_speak_now"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RadioButton
android:id="@+id/rb2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="false"
/>
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Add"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/ic_input_add"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RadioButton
android:id="@+id/rb3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="false"
/>
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Delete"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/ic_delete"/>
</LinearLayout>
</uz.jamshid.libarary.NestedRadioGroup>
You can handle SelectListener with lambda or in simple kotlin/java way
rg.setRadioGroupListener({
Log.d("NestedRadioGroup", "select")
}, {
Log.d("NestedRadioGroup", "unSelect")
},{
Log.d("NestedRadioGroup", "reSelect")
})
NestedRadioGroup have 3 callbacks
onSelect
onUnSelect
onReSelect
They all returns ViewGroup of RadioButton as parameter
You can also listen for only one callback, just by setting explicitly in lambda
rg.setRadioGroupListener(onUnSelect = {
Log.d("NestedRadioGroup", "onUnSelect")
})