Avançar para o conteúdo principal

Android - Screen Orientation and Saved State

Olá a todos




Se já programaram para Android ou se estão para programar fica aqui uma solução muito simples para guardar o estado de uma Actividade.


Por defeito o lifecycle de uma actividade android é renovada sempre que alteramos a orientação do ecrã. (o método onCreate é chamado)
Isto quer dizer que todos os componentes dessa actividade são recriados, ficando no seu estado normal.

Exemplo: Se na atividade existir caixa de texto em que o utilizador já inseriu lá  texto, este desaparece ficando a caixa de texto vazia.

Isto pode ser um grande problema se o utilizador estiver a preencher um formulário e a meio rodar o equipamento... porque até dá mais jeito e depois fica sem nada tendo que recomeçar tudo de novo.

Se já pesquisou um pouco pela Web pode ter ficado um pouco assustado com algumas das soluções encontradas.

Existem soluções em que o programador coloca os valores no Bundle da actividade e restaura os mesmos após a nova orientação de ecrã ou então implementa a interface Parcelabe na class que quer voltar a restaurar.

A primeira opção a meu ver é péssima se tivermos 10 ou 1000 campos no formulário... imaginem estar a guardar esse valores um a um e a voltar a fazer o setText em todas as caixas de texto.... Horrível e pouco elegante, a outra solução é um pouco abusada e só deve ser utilizada em situações muito especificas.

Por isso deixo aqui a maravilhosa solução que passa por inserir apenas uma linha de código hehehe :)

Para isso vamos ao ficheiro AndroidManifest.xml da nossa aplicação e dentro das TAGs que definem a actividade na qual queremos que não seja efectuada a recriação da mesma, para não perdermos os valores já inseridos pelo utilizador, adicionamos a seguinte linha

   android:configChanges="orientation|screenSize"

Resultado final

<activity
    android:name=".MyActivity"
    android:label="@string/app_name"
    android:configChanges="orientation|screenSize">
 </activity>


Espero ter poupado uma dores de cabeça :)

Abraço

Comentários

Mensagens populares deste blogue

CNC 2418 Autolevel PINS

Boas, se têm uma CNC 2418 então vão querer ter Autolevel :) Aqui ficam os pinos :) Thanks Nuno Miguel :)

3 Formas de configurar o Wi-Fi no ESP8266

3 Formas de  configurar o Wi-Fi no ESP8266 O nosso famoso ESP8266 veio para ficar, cada vez mais este microcontrolador é utilizado para desenvolver dispositivos fantásticos, é verdade que o ESP pode ser utilizado como um simples MCU , mas é a sua capacidade de se ligar a uma rede Wi-Fi, faz dele a escolha perfeita no que toca dipositivos IoT . Este artigo tem foco em três diferentes soluções que permitem programar o ESP de forma a que este se consiga ligar a uma rede Wi-Fi. É sabido que da primeira vez que o ESP é energizado este tem de conhecer ou vir a conhecer o SSID e a Password configurada no Access Point ao qual o queremos conectar de forma a fazer para da rede e ter acesso à Internet se assim for necessário. Vamos então ver como implementar as três soluções, analisar cada uma delas e ponderar os prós e contras e cada uma delas. Passemos ao caso mais simples, ao qual denomino de “Hard Coded” , esta é a forma mais utilizada por quem começa a util...

Home Assistant Lovelace em Modo Kiosk por Defeito

Olá Malta, recentemente implementei o maravilhoso tema Lovelace no meu Home Assistant, no entanto  ao colocar o mesmo nos tablets que tenho nas paredes, verifiquei que aquela barra azul superior ocupa uma grande parte do écran, tornando a experiência de utilização muito má. Bom investiguei um pouco e descobri que existe um script que permite desativar as barras chamado. KIOSK Com o KIOK passamos disto...   Para isto... O problema é que para ativar o modo de KIOSK temos de colocar no URL manualmente lovelace/0?kiosk&show_tabs, para alem de ser incomodo estar sempre a colocar aquilo no URL final não funciona caso seja criada uma APP Android Via Browser. Meti mãos à obra e arranjei uma solução definitiva e simples. Basta editarmos o Script do Lovelace e adicionar-mos lá os parametros no URL <script>     if (window.location.pathname === "/states") {         window.location.href = "/lovelace/...