Tutorial Android #12 – Editando Registros do Banco de Dados

Olá pessoal!

No último post, tornamos o nosso aplicativo Lista de Restaurantes. No post de hoje, vamos aprimorar a forma como ele lida com o banco, fazendo com que os registros inseridos possam ser editados. Além disso, também faremos uma mudança no visual da aplicação, retirando as abas e colocar a tela de adição de restaurantes como uma opção no menu.

Prontos para começar? 😀

O primeiro passo é criarmos uma nova Activity, que será onde ficará, a partir de agora, o nosso formulário de cadastro (e consequentemente, de edição). Separaremos as funções da nossa Activity inicial. Então, crie a classe FormularioDetalhes.

Por enquanto, esta Activity não tem nenhum layout atribuído, já que ainda não criamos o seu layout.

Antes de utilizar esta Activity em nosso projeto, precisamos declará-la no arquivo AndroidManifest.xml. Ele encontra-se na raiz da árvore do projeto.

Abra-o e selecione a aba inferior AndroidManifest.xml para abri-lo para a edição. Dentro do nó application, adicionaremos um novo nó activity.

Prosseguindo, precisamos iniciar esta Activity quando clicarmos sobre um dos itens da lista. Assim, modifique o onListClick dessa forma:

Se quiser testar a aplicação, ela deve exibir uma tela vazia ao clicar em algum item da lista.

Continuando, vamos agora fazer a migração do formulário para a nova Activity. Primeiramente, crie o arquivo form_detalhes.xml na pasta res/layout, podendo utilizar o main.xml como base para ele:

Agora, volte a Activity FormularioDetalhes e adicione esta linha ao final do método onCreate:

O próximo passo é mover toda a lógica do formulário para a nossa classe FormularioDetalhes. Primeiramente, adicione os atributos da classe que estavam na ListaRestaurantes para a FormularioDetalhes:

Agora, copie a busca aos widgets no formulário do método onCreate() do ListaRestaurantes para o FormularioDetalhes, no mesmo local.

Por fim, vamos copiar a implementação do nosso listener onSave para a classe FormularioDetalhes, porém retirando a parte que trata da inserção no banco de dados:

Agora é hora de “limparmos” a interface original do aplicativo, no main.xml. Retiraremos o formulário que existia e as abas, além do ajuste no layout para abrigar somente a lista. O que nos resta é isso:

Após isso, exclua a pasta layout_land e o arquivo main.xml dentro dela (calma, calma… voltaremos a mexer com ele em posts futuros :)).

No momento, ListaRestaurantes estende TabActivity. Porém, como modificamos a estrutura de nossa aplicação, isso não é mais necessário. Modifique a classe, de forma que ListaRestaurante estenda ListActivity. Em seguida, modifique o método onCreate() para retirar os códigos que diziam respeito às abas que utilizávamos:

Antes de seguirmos em frente, vamos analisar o que vamos fazer: o FormularioDetalhes será utilizado tanto na criação de novos restaurantes quando na edição de restaurantes já cadastrados. Além disso, ele precisa saber, quando estiver editando, qual restaurante se trata. Para isso, precisamos do identificador do restaurante (o campo _id do banco de dados).

Primeiramente, vamos criar um atributo para a classe ListaRestaurantes:

Após isso, vamos mudar o objeto onListClick para um onListItemClick(), onde vamos passar o valor do id para a outra Activity:

Em seguida, adicione o seguinte atributo na classe FormularioDetalhes:

Este atributo será nulo se estivermos adicionando um novo restaurante, ou o identificador, caso estejamos editando um restaurante.

Como criamos o GerenciadorRestaurantes no método onCreate(), precisamos encerrá-lo no método onDestroy():

Como agora temos o ID como controle dos restaurantes, precisamos de um método que nos retorne o Restaurante com o identificador correspondente. Adicione o seguinte método a classe GerenciadorRestaurantes:

Agora, adicione o seguinte trecho ao fim do método onCreate() da classe FormularioDetalhes:

Adicione, então, a implementação do método carregar():

Agora, vamos adicionar a opção de menu Adicionar para que possamos, a partir da listagem (que agora será a tela principal do aplicativo), inserir um novo restaurante. Modifique o arquivo opcao.xml que encontra-se em res/menu.

Este item de mídia é padrão do Android, e pode ser encontrado no seu diretório de instalação do SDK, em platforms -> versão do Android que está usando (no meu caso, android-8 (ou 2.2)) -> data -> res -> tamanho de tela (podemos utilizar drawable-mdpi). Procure pelo ícone ic_menu_add.png. Copie-o e coloque na pasta res/drawable da sua aplicação. Para padronizar o nome, eu o renomeei para adicionar.png. 🙂

Agora que já temos o menu, vamos ajustar a classe ListaRestaurantes para manipulá-lo corretamente. Vamos novamente implementar o método onCreateOptionsMenu():

E adicione, também, a implementação de onOptionsItemSelected():

Bom, lá na nossa classe GerenciadorRestaurantes, temos o método para inserir um novo restaurante, mas não temos o método para atualizar. Portanto, adicione o seguinte método à classe:

Por fim, precisamos adicionar o comportamento do botão Salvar no formulário. Modifique a implementação do onSave na classe FormularioDetalhes para verificar se a operação é de inclusão ou alteração:

Verifique se não há código duplicado, corrija os imports (Ctrl + Shift + O) e pronto! Já temos nossa aplicação funcionando!

Como o post já está bem grande, não vou colocar a listagem das classes. Caso esteja com problemas, você pode baixar o projeto completo aqui.

Bons estudos e até a próxima galera!

9 comentários sobre “Tutorial Android #12 – Editando Registros do Banco de Dados

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.