Mobile

Android – Injeção de dependência com RoboGuice [Eventos] (Parte 5)

 

Dando continuidade a série RoboGuice, neste post farei uma introdução à utilização de Eventos com RoboGuice. Se você ainda não viu os posts anteriores sobre RoboGuice postados aqui no blog da redspark, sugiro que dê uma olhada em: https://www.redspark.io/?p=6325, https://www.redspark.io/?p=6341, https://www.redspark.io/?p=6349 e https://www.redspark.io/?p=6357.

Feita a introdução, vamos ao que interessa: O CÓDIGO! 🙂

 

A utilização de eventos com RoboGuice é extremamente simples e pode ‘limpar’ bastante nossas classes. O Seguinte código demonstra uma Activity que já utiliza o RoboGuice para injeção de dependência, mas ainda não faz utilização dos eventos:

 

[cc lang=”java”]
package br.com.;

import roboguice.activity.RoboActivity;
import roboguice.inject.ContentView;
import roboguice.inject.InjectView;
import android.os.Bundle;
import android.widget.TextView;
import br.com..listeners.redsparkListeners;
import br.com..service.IMyService;

import com.google.inject.Inject;
import com.google.inject.name.Named;

@ContentView(R.layout.main)
public class HelloAndroidActivity extends RoboActivity {

@Inject
@Named(“new”)
private IMyService service;

@InjectView(R.id.dateNow)
private TextView dateNow;

@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
dateNow.setText(service.mensagem());
}

}

[/cc]
 

É evidente que a classe já é bastante enxuta, devido a utilização do RoboGuice, mas pode ficar ainda melhor!

[cc lang=”java”]
package br.com.;

import roboguice.activity.RoboActivity;
import roboguice.inject.ContentView;
import roboguice.inject.InjectView;
import android.os.Bundle;
import android.widget.TextView;
import br.com..listeners.redsparkListeners;
import br.com..service.IMyService;

import com.google.inject.Inject;
import com.google.inject.name.Named;

@ContentView(R.layout.main)
public class HelloAndroidActivity extends RoboActivity {

@Inject
protected redsparkListeners dClickListeners;

}

[/cc]

 

Agora nossa Activity praticamente não possui código! Mas, para aonde foi toda a lógica que possuiamos anteriormente ? Note que a única linha de código presente na nossa Activity faz referencia à classe redsparkListeners, e é nessa classe que está nosso código!
Para que o RoboGuice consiga fazer o registro dos ‘listeners’, basta que façamos o que foi feito no código acima: o registro das classes que controlarão os eventos através da injeção de dependencia do próprio RoboGuice. Usualmente esta injeção de dependência é feita nas próprias Activities, mas podem ser feitas em qualquer lugar do seu código.

 

Neste nosso exemplo, a nossa classe redsparkListeners fica da seguinte maneira:
 
[cc lang=”java”]
/**
*
*/
package br.com..listeners;

import roboguice.activity.event.OnCreateEvent;
import roboguice.event.Observes;
import roboguice.inject.InjectView;
import android.widget.TextView;
import br.com..R;
import br.com..service.IMyService;

import com.google.inject.Inject;

/**
* @author lucas.oliveira
*
*/
public class redsparkListeners {

@Inject
private IMyService service;

@InjectView(R.id.dateNow)
private TextView dateNow;

public void eventoOnCreate(@Observes final OnCreateEvent createEvent) {
// createEvent.getSavedInstanceState();
dateNow.setText(service.mensagem());
}
}
[/cc]
 

O RoboGuice entende que qualquer método com retorno void e um único parametro anotado com @Observes é um listener. Desta forma, no código acima, temos o método eventoOnCreate que ‘escuta’ o OnCreateEvent, que é um dos eventos fornecidos pelo RoboGuice para controle da aplicação.
Note, também, que temos uma linha de código comentada: Alguns eventos possuem parâmetros, e eles são acessíveis também, como o evento OnCreate, que possui o parâmetro savedInstanceState.
 
Alguns dos eventos fornecidos pelo RoboGuice são:

  • OnActivityResultEvent
  • OnConfigurationChangedEvent
  • OnContentChangedEvent
  • OnContentViewAvailableEvent
  • OnCreateEvent
  • OnDestroyEvent
  • OnNewIntentEvent
  • OnPauseEvent
  • OnRestartEvent
  • OnResumeEvent
  • OnStartEvent
  • OnStopEvent

 
Obviamente, é possível que você crie seus próprios eventos. E isso será demonstrado no próximo post! 🙂
Para finalizar, algumas coisas que você deve saber:

  • O RoboGuice permite que sejam criados diversos métodos que ‘escutam’ o mesmo evento. Entretanto, é importante ressaltar que a ordem de execução é indeterminada, então tome cuidado!
  • Os eventos não propagam entre contextos. O que isso quer dizer? Que eventos disparados por uma Activity apenas serão ‘escutados’ pelos listeners registrados por ela.
  • Como eu já disse, você pode e deve criar seus próprios eventos para controle de sua aplicação, ao invés de depender apenas dos pré-fornecidos pelo RoboGuice.
  • A anotação @Observes pode ser usada em métodos, apenas! Não tente utilizá-la em construtores, por exemplo.

 


Este foi mais um post da série Android, espero que tenham gostado. Quaisquer dúvidas, sugestões e/ou reclamações, comentem!

_________________________________________

Lucas Oliveira – Analista Programador na redspark.
Bacharel em Sistemas de Informação pela Universidade de São Paulo.
@OliveiraLima_

 

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Compartilhe isso: