quinta-feira, 31 de janeiro de 2013

Dica: Como chamar métodos em activities internas da TabActivity

  Problema: Atualizar automaticamente dados entre abas de uma TabActivity, quando mudar de aba. 

  Explicando melhor, você tem n abas em uma TabActivity e cada aba atualiza uma parcela dos dados (ou todos) que são compartilhados por todas as abas. Cada aba é controlada por uma acitivity. Então, quando uma aba for selecionada, muda de view e muda de activity: a solução parece ser simples: vamos usar um dos métodos de retorno da activity, tipo onStart ou onResume certo? Errado, infelizmente nenhum desses métodos é chamado.

  Já tinha encontrado problemas parecidos com esse, mas não tinha encontrado uma solução satisfatória.

  Recentemente, um colega estava com o mesmo problema. Pesquisando em alguns lugares, pegando dicas em outros, juntando com alguns testes que tinha feito, chegamos em uma solução interessante.

  A solução usa duas interfaces, uma existente no TabHost (OnTabChangedListener) e outra definida na TabActivity e implementada nas activities que controlam cada tab (OnSingletonUpdatedListener).

 Os dados compartilhados estão num Singleton.

Na TabActivity:



E nas activities das abas:


Obs: Não testei essa solução exaustivamente, se encontrarem algum problema ou se funcionar bem, por favor, me avisem!
Grato