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:
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:
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_