Atividades reutilizáveis no Android
Já teve o problema de ter que ficar copiando código de um lado para outro com o objetivo de criar telas com layouts e comportamentos semelhantes?
Hoje vamos criar uma atividade dispensável e reutilizável de forma nativa Android para resolver este problema, dispensável porque ela sempre se fechará quando algum botão for clicado e reutilizável porque ela poderá ser reutilizada sem a necessidade de duplicação de código.
Nesse exemplo vamos demonstrar uma tela de bem vindo e uma para enviar feedback que serão geradas através desta única atividade reutilizável. O resultado que vamos obter segue abaixo:
Como pode perceber as duas telas possuem a mesma estrutura apenas com textos e ações diferentes.
O que vamos aprender?
- Criação de atividade reutilizável e dispensável
- Passar parâmetros via intenção
- Retornar um resultado a tela origem quando a atividade reutilizável for fechada
- Processar diferentes resultados provindos das telas reutilizáveis
O que vamos precisar?
Um enum que represente os tipos das telas que você deseja mostrar para o usuário.
Esse enum será utilizado quando você quiser saber qual tela reutilizável foi mostrada, assim você poderá realizar alguma ação de sua necessidade após esse acontecimento.
O pacote de extras com as informações que gostaríamos de customizar e o seu tipo. Ex.:
Uma atividade reutilizável e sua viewModel:
Mãos na massa
Vamos começar adicionando o seguinte código para inicializar a atividade reutilizável com suas respectivas características (extras):
(este código pode estar contido em uma classe de router do seu projeto)
Dentro da atividade reutilizável, receberemos os extras e assim mostramos os elementos na tela:
Passando a responsabilidade para a sua ViewModel você consegue carregar os elementos através de elementos observáveis LiveData via data binding:
(esses observáveis devem estar presentes no xml da sua tela reutilizável)
Como já mencionado, a tela reutilizável será dispensável, então o click do botão deve fechar a tela. E para isso você deve acionar o método finish da atividade reutilizável:
Até aí tudo certo, mas e se quisermos retornar alguma informação ao fechar a tela reutilizável para a tela origem? Se quisermos por exemplo saber, qual tela reutilizável foi efetivamente fechada e com que dados?
É então que o enum “ReusableScreenType” aparece, que foi enviado inicialmente nos extras desta atividade. Com ele, você sabe qual tipo de tela reutilizável que foi aberta. Assim, você pode repassá-lo através de outro objeto, que apenas representa o resultado da atividade reutilizável:
Antes de encerrar a atividade você deve então adicionar este resultado:
Na atividade origem (a que gerencia as atividades reutilizáveis) você apenas precisa agora observar este resultado, através do código abaixo:
Assim, sua tela origem conseguirá reconhecer qual tela reutilizável que foi efetivamente encerrada, através do enum “screenType”. Como também, terá acesso a informações adicionais que você pode colocar no seu objeto de resultado, como por exemplo o texto inserido pelo usuário nesse caso.
Espero que esse post tenha agregado em algo e que possa ter te ajudado a escrever um código mais reutilizável e mais centralizado, trazendo um pouco mais de facilidade na manutenção e extensão do seu projeto.
Segue o link do projeto caso tenha alguma dúvida a mais:
Guilherme Cherubini