O OnsaveInstancestate deve salvar a “ativação” das visualizações?
-
27-09-2019 - |
Pergunta
Eu tenho uma atividade de preferências em que posso alterar o idioma e o tema do meu aplicativo. A partir daí, volto para a atividade anterior através da chave traseira e quero recriar a atividade.
Eu consegui fazer isso reinicializando o layout em onResume
e também chamando onRestoreInstanceState
de lá. Todas as visualizações são restauradas corretamente, com caixas de seleção verificadas, se necessário, o EdittExts preenchidos com textos que deixei lá anteriormente.
Mas também tenho um botão que está inicialmente desativado e fica ativado apenas quando um radiobutton é verificado. O problema é o seguinte: verifico o radiobutton, o botão fica ativado. Depois vou para as configurações, mudo o tema lá e retorno à primeira atividade. Quando chego lá, o radiobutton é restaurado conforme verificado, mas o botão está desativado.
Portanto, parece que o estado habilitado/desativado não está sendo salvo no pacote, o que parece contra -intuitivo. E não encontrei nenhum código na fonte do Android que faça isso também. Estou perdendo alguma coisa, ou tenho que escrever meu próprio código para isso?
EDIT: BTW, o estado é salvo apenas para as visualizações que têm IDs. E esse botão tem um, eu garanto que :)
Solução
A chave aqui é ver o que está realmente ativando o botão e garantir que isso seja consistente em todo acesso ao aplicativo.
Da sua declaração:
Mas também tenho um botão que está inicialmente desativado e fica ativado apenas quando um radiobutton é verificado.
Parece que você tem um ouvinte no radiobutton que permite o botão. A partir disso, concluo que o botão está inicialmente desativado, o que significa que você precisará alterar isso toda vez que executa a atividade.
Suas opções são as seguintes:
- Faça com que o Radiobutton defina algum tipo de preferência global que é verificada no resumo, permitindo o botão, se necessário
- Quando o radiobutton for verificado, altere as configurações globais (ou talvez as configurações da GUI) para uma em que o botão está ativado. Isso pode ficar para sempre até que o radiobutton esteja desmarcado novamente.
- Salvar a habilitação em OnsaveInstancestate como você mencionar
É difícil dizer o que é mais apropriado porque você não mencionou o contexto do caso de uso, mas eu evitaria enviá -lo no pacote, a menos que seja uma atividade muito ocasionalmente usada. Faz muito sentido acompanhar a configuração do Radiobutton, armazenando -a ou alterando a visualização até o aviso prévio.
Outras dicas
A maneira mais fácil é ativar o botão em vez de se o radiobutton estiver verificado.
Editar: PreferenceGroup pode lidar Preferencatividade.