Gostaria de saber se é possível agrupar cada single RadioButton
em um único RadioGroup
mantendo a mesma estrutura. Minha estrutura é parecida com esta:
- LinearLayout_main
- LinearLayout_1
- RadioButton1
- LinearLayout_2
- RadioButton2
- LinearLayout_3
- RadioButton3
- LinearLayout_1
Como você pode ver, agora cada RadioButton
um é filho de um diferente LinearLayout
. Tentei usar a estrutura abaixo, mas não funcionou:
- Radiogroup
- LinearLayout_main
- LinearLayout_1
- RadioButton1
- LinearLayout_2
- RadioButton2
- LinearLayout_3
- RadioButton3
- LinearLayout_1
- LinearLayout_main
android
radio-button
android-linearlayout
radio-group
marcoqf73
fonte
fonte
Respostas:
Parece que as boas pessoas no Google / Android presumem que, quando você usa RadioButtons, não precisa da flexibilidade que vem com todos os outros aspectos do sistema de interface / layout do Android. Simplificando: eles não querem que você aninhe layouts e botões de opção. Suspiro.
Então você tem que contornar o problema. Isso significa que você deve implementar botões de opção por conta própria.
Isso realmente não é muito difícil. Em seu onCreate (), configure seus RadioButtons com seus próprios onClick () para que, quando ativados, configurem o setChecked (true) e façam o contrário para os outros botões. Por exemplo:
Sim, eu sei - muito à moda antiga. Mas funciona. Boa sorte!
fonte
Use esta classe que criei. Ele encontrará todos os filhos verificáveis em sua hierarquia.
fonte
Bem, eu escrevi esta aula simples.
Basta usá-lo assim:
ou
Você pode chamá-lo em onCreate () de Activity, por exemplo. Não importa em que
RadioButton
você clique, os outros ficarão desmarcados. Além disso, não importa se algunsRadioButtons
estão dentro de algunsRadioGroup
ou não.Aqui está a aula:
fonte
Aqui está minha solução baseada na solução @lostdev e implementação de
RadioGroup
. É um RadioGroup modificado para funcionar com RadioButtons (ou outros CompoundButtons) que estão aninhados em layouts filho.Você pode usá-lo em seu layout da mesma forma que faria com um normal,
RadioGroup
exceto que também funciona comRadioButton
visualizações aninhadas :fonte
Esta solução não foi postada, então postando:
Etapa 0: crie uma
CompoundButton previousCheckedCompoundButton;
como variável global.Etapa 1: criar
OnCheckedChangedListener
botões de opçãoEtapa 3: adicionar ouvinte a todos os botões de opção:
É isso aí!! Você Terminou.
fonte
Sigh .. Realmente culpo que o Android não tenha uma funcionalidade tão básica.
Adaptado da resposta de @ScottBiggs, esta é a maneira possivelmente mais curta de fazer isso com Kotlin:
fonte
Criei esses dois métodos para resolver esse problema. Basta passar o ViewGroup onde estão os RadioButtons (pode ser um RadioGroup, LinearLayout, RelativeLayout, etc.) e definir os eventos OnClick exclusivamente, ou seja, sempre que um dos RadioButtons for filho do ViewGroup ( em qualquer nível aninhado) é selecionado, os outros são desmarcados. Ele funciona com quantos layouts aninhados você desejar.
O uso dentro de uma atividade seria assim:
fonte
Eu escrevi minha própria classe de grupo de rádio que permite conter botões de rádio aninhados. Confira. Se você encontrar bugs, por favor me avise.
fonte
Você precisa fazer duas coisas:
mListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
Checkable
.Então eu acho que a melhor solução é implementar Checkable dentro de seu LinearLayout interno: (graças a daichan4649, em seu link, https://gist.github.com/daichan4649/5245378 , peguei todo o código colado abaixo)
CheckableLayout.java
inflater_list_column.xml
TestFragment.java
fonte
Eu enfrento o mesmo problema, pois quero colocar 4 botões de opção diferentes em dois layouts lineares diferentes e esse layout será filho do grupo de rádio. Para alcançar o comportamento desejado no RadioGroup, sobrecarreguei a função addView
Aqui está a solução
fonte
Não há nada que o impeça de implementar essa estrutura de layout (
RadioGroup
na verdade é uma subclasse deLinearLayout
), mas não deveria. Em primeiro lugar, você cria uma estrutura de 4 níveis de profundidade (usando outra estrutura de layout, você pode otimizá-la) e, em segundo lugar, se vocêRadioButtons
não for filho direto de aRadioGroup
, o único item selecionado no grupo não funcionará. Isso significa que se você selecionar umRadiobutton
desse layout e, em seguida, selecionar outro,RadioButton
acabará com doisRadioButtons
selecionados em vez do último selecionado.Se você explicar o que deseja fazer nesse layout, talvez eu possa recomendar uma alternativa.
fonte
RadioButtons
eo paiRadioGroup
, então isso não vai funcionar como de costume e, basicamente, você vai acabar com umLinearLayout
preenchido comRadioButtons
.Meu $ 0,02 com base em @infografnet e @lostdev (também obrigado @Neromancer pela sugestão do Botão Composto!)
Uso (com ouvinte incluído):
Bônus: você pode obter o último botão verificado, a lista de botões inteiros e pode verificar qualquer botão por índice com isso!
fonte
fonte
Embora este seja um tópico mais antigo, eu gostaria de compartilhar rapidamente um código hacky simples que escrevi. Não é para todos e também poderia ser aprimorado.
A situação de usar este código ??
Este código é para pessoas que possuem um layout da pergunta original ou similar, no meu caso foi o seguinte. Isso pessoalmente era para um Dialog que eu estava usando.
O que o código faz sozinho ??
Este código irá enumerar cada Child de "LinLayout_Main" e para cada child que for um "LinearLayout" ele irá enumerar essa View para qualquer RadioButtons.
Simplesmente, ele procurará o pai "LinLayout_Main" e encontrará quaisquer RadioButtons que estejam em qualquer LinearLayouts filho.
MyMethod_ShowDialog
Irá mostrar uma caixa de diálogo com um arquivo de layout XML ao mesmo tempo em que procura definir o "setOnClickListener" para cada RadioButton que encontrar
MyMethod_ClickRadio
fará um loop em cada RadioButton da mesma forma que "MyMethod_ShowDialog", mas em vez de definir o "setOnClickListener", ele "setChecked (false)" limpará cada RadioButton e, em seguida, como a última etapa, "setChecked (false)" para o RadioButton que chamado de evento de clique.
Pode haver bugs, copiado do projeto e renomeado Voids / XML / ID
Você também pode executar o mesmo tipo de loop para descobrir quais itens são verificados
fonte
Esta é uma versão modificada da solução @Infografnet. É simples e fácil de usar.
RadioGroupHelper group = new RadioGroupHelper(this,R.id.radioButton1,R.id.radioButton2); group.radioButtons.get(0).performClick(); //programmatically
Basta copiar e colar
fonte
Conforme mostrado nas respostas, a solução é um hack personalizado simples. Aqui está minha versão minimalista em Kotlin.
então você só precisa fazer algo parecido no onCreate de sua atividade ou onViewCreated do fragmento:
fonte
Esta é minha solução no Kotlin para layout personalizado com RadioButton dentro.
fonte
Estou no mesmo problema, tenho que usar o botão Radio para gênero e todos estavam com uma imagem e um texto então tentei resolver usando o seguinte caminho.
arquivo xml:
No arquivo java: Eu defino setOnCheckedChangeListener em todos os 3 botões de opção e o método de substituição conforme mencionado abaixo e está funcionando bem para mim.
fonte
MixedCompoundButtonGroup faz isso por você!
Essência MixedCompoundButtonGroup
fonte
Você pode usar este código de extensão RadioGroup simples. Solte quaisquer layouts / visualizações / imagens nele junto com os RadioButtons e ele funcionará.
Ele contém um retorno de chamada de seleção que retorna o RadioButton selecionado com seu índice e você pode definir a seleção programaticamente por índice ou id:
Use-o em seu layout xml:
Para se registrar no retorno de chamada:
fonte