diff options
author | ByteHamster <info@bytehamster.com> | 2020-06-21 12:49:02 +0200 |
---|---|---|
committer | ByteHamster <info@bytehamster.com> | 2020-06-21 13:17:36 +0200 |
commit | 7de9e0d4c1807bff054c1aef999fc600088ab521 (patch) | |
tree | c22e722c152aa5b95955391e41c681bff6cc8ca1 /app/src/main/java/de/danoeh/antennapod/view/RecursiveRadioGroup.java | |
parent | f243bcd4cce1f3af9449c74fa38f6c90f2ea9d22 (diff) | |
download | AntennaPod-7de9e0d4c1807bff054c1aef999fc600088ab521.zip |
Using state lists for colors
Diffstat (limited to 'app/src/main/java/de/danoeh/antennapod/view/RecursiveRadioGroup.java')
-rw-r--r-- | app/src/main/java/de/danoeh/antennapod/view/RecursiveRadioGroup.java | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/view/RecursiveRadioGroup.java b/app/src/main/java/de/danoeh/antennapod/view/RecursiveRadioGroup.java new file mode 100644 index 000000000..162f524bf --- /dev/null +++ b/app/src/main/java/de/danoeh/antennapod/view/RecursiveRadioGroup.java @@ -0,0 +1,68 @@ +package de.danoeh.antennapod.view; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.ActionMode; +import android.view.View; +import android.view.ViewGroup; +import android.widget.LinearLayout; +import android.widget.RadioButton; +import java.util.ArrayList; + +/** + * An alternative to {@link android.widget.RadioGroup} that allows to nest children. + * Basend on https://stackoverflow.com/a/14309274. + */ +public class RecursiveRadioGroup extends LinearLayout { + private final ArrayList<RadioButton> radioButtons = new ArrayList<>(); + private RadioButton checkedButton = null; + + public RecursiveRadioGroup(Context context) { + super(context); + } + + public RecursiveRadioGroup(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public RecursiveRadioGroup(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + @Override + public void addView(View child, int index, ViewGroup.LayoutParams params) { + super.addView(child, index, params); + parseChild(child); + } + + public void parseChild(final View child) { + if (child instanceof RadioButton) { + RadioButton button = (RadioButton) child; + radioButtons.add(button); + button.setOnCheckedChangeListener((buttonView, isChecked) -> { + if (!isChecked) { + return; + } + checkedButton = (RadioButton) buttonView; + + for (RadioButton view : radioButtons) { + if (view != buttonView) { + view.setChecked(false); + } + } + }); + } else if (child instanceof ViewGroup) { + parseChildren((ViewGroup) child); + } + } + + public void parseChildren(final ViewGroup child) { + for (int i = 0; i < child.getChildCount(); i++) { + parseChild(child.getChildAt(i)); + } + } + + public RadioButton getCheckedButton() { + return checkedButton; + } +} |