domingo, 21 de abril de 2013

Implementando o padrão MVC no Android, usando a API Fragments

  Comecei este tutorial com o objetivo de mostrar um exemplo de uso da API Fragments, algo simples sem grandes pretensões.
  Depois acrescentei um exemplo de uso de um Singleton. Como essa classe poderia mais tarde ser usada concorrentemente (com Threads ou AsyncTasks) usei um modelo de Singleton thread-safe.
  Para demonstrar a comunicação fragment-activity, adotei o modelo implementado via interface, conhecido como "listener". Coloquei as três formas mais comuns de usar esse padrão: Passar dados para a activity-host, consultar uma informação da activity-host e informar um evento ocorrido no fragment para que a activity-host possa tratá-lo.
  Só estava faltando a comunicação activity-fragment, então incluí isso também no exemplo.
  No final, acabei com um exemplo do padrão MVC em uma app android. Onde o M ficou por conta do Singleton, o C por conta das activities e o V com os fragments.
 Também estou testando o uso da biblioteca de compatibilidade, o agora conhecido por Android Support Library.
  Como não vou comentar o código por ser bem simples, vou dar uma visão geral do projeto.
  O projeto ficou bem simples, apesar de implementar tudo que disse aí em cima, chamei-o de ListaDe, por pura falta de inspiração, mas dá uma verificada quantas listas você tem contato no dia a dia. É composto de duas telas, uma para entrar com os dados e outra um ListView.
  Para mostrar o poder da possibilidade de reutilização de código usando fragments, coloquei três situações de uso do aplicativo:
 -Large retrato - com dois fragments na vertical;
 -Large paisagem - com dois fragments na horizontal;
 -outros casos - um fragment por tela.

  Observem que da maneira como foi implementado, toda a coordenação é exclusiva das activities (Controller), ela que atualiza os dados, ela que avisa que os dados foram alterados e ela que chama outra activity para trocar de tela.
  Por outro lado, os fragments foram implementados de tal forma que ficassem desacoplados das activities, permitindo reutilização de código.


  Aviso que só coloquei o básico, o essencial para facilitar o entendimento e deixar outros detalhes para quem desejar implementar.
  Seguem os códigos:

 string.xml


layout\fragment1.xml


layout\activity1.xml


layout\activity2.xml


layout-large-land\activity1.xml


layout-large-port\activity1.xml


MySingleton.java
Fragment1.java

Fragment2.java

Activity1.java

Activity2.java



Rodando num celular:

























Num tablet posição retrato:






































Num tablet posição paisagem:





















Pessoal, não comentei o código mas estejam à vontade para comentar, solicitar uma ou outra explicação, que na medida do possível tentarei responder.

Obrigado!

Nenhum comentário:

Postar um comentário