Olá pessoal,
estou fazendo um projeto e estou querendo fazer a navegação entre telas, onde o tratamento dos botões de acontecer em uma classe separada da activity deste. Alguém sabe como fazer?
Implementar navegação entre telas utilizando padrão Controller
7 Respostas
Você quer tratar os eventos de click nos botões em outra classe??
Basta você criar uma classe que implemente a interface OnClickListener e, no onCreate() da sua activity, obter uma referência ao objeto da tela que representa o botão (Button) e invocar nele o método setOnClickListener(), passando como parâmetro uma referência de um objeto dessa classe que você criou. Desta forma você vai tratar o evento em outra classe.
Não sei o motivo real pelo qual você quer seguir esta abordagem. Normalmente a própria activity faz o tratamento, porque no Android ela já faz o papel do controller.
Sim, queria fazer isso mesmo, já consegui, mas surgiu outro problema, preciso ter a referencia de uma fachada para todas essas telas, Ex: Tela Principal: 2 Botoes (btTarefas, btCategorias), ao clicar em categoria deve aparecer uma outra tela, Menu Categoria: 2 botões(btAddCategoria, btListarCategoria, btRemover, btCategoria), ao clicar em btAddCategoria —> btAddCategoriaMae, btCategoriaFilha, clicando em btAddCategoriaMae----> Chegou a hora de receber os dados e para utilizar um método da fachada.
Utilizei um Intent para iniciar cada Activity, mas não consegui passar a fachada como parâmetro, daí minha nova dúvida.
Att,
Estou fazendo um projeto da disciplina de POO, daí estamos implementando desta maneira para aprender alguns desses padrões.
O Android permite a passagem de parâmetros através das intents. Dê uma olhada no método putExtras() e getExtras() das intents.
Já se você tem objetos que precisa que fiquem disponíveis para toda a sua aplicação, você pode também criar uma classe para fornecer estas referências. Esta classe pode ser implementada usando outro padrão de projeto, chamado singleton. O singleton garante que você vai ter apenas uma instância da classe durante a execução da sua aplicação.
Abraço!
Ok, consegui resolver usando o singleton, uma ótima solução!
Agradeço a ajuda de todos!
Att,
Fernando Mateus de Oliveira
Fernando Mateus,
Eu estou tendo o mesmo problema que você no meu caso é para o meu TCC, já procurei em várias fontes no google mais não achei anda que me ajudasse a conseguir fazer isso... Então por favor poderima me dizer como conseguiu implementar os eventos das activitys em outras classes(controllers) se possível mostrar exemplo com código? Ctosin eu tentei fazer o que você disse só que deu erro na minha activity segue o código da mesma:
package com.projetofinal.sisodonto.view;
import com.projetofinal.sisodonto.controller.MainMenuController;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
public class MainMenu extends Activity {
private Button btSair;
private MainMenuController mainMenuController;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_menu);
inicializarController();// aqui eu criei o objeto controller que vai tratar os eventos dessa activity
btSair = (Button)findViewById(R.id.btSair); // aqui eu tentei pegar a referência do botão
btSair.setOnClickListener(mainMenuController); //aqui eu usei o método setonClickListener passado como argumento o objeto controller que eu criei
}
public void inicializarController(){
this.mainMenuController = new MainMenuController();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main_menu, menu);
return true;
}
}
O código da minha classe de controle que iria tratar os eventos da activity acima:
package com.projetofinal.sisodonto.controller;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
public class MainMenuController implements OnClickListener {
@Override
public void onClick(DialogInterface arg0, int arg1) {
// TODO Auto-generated method stub
}
}
Atenciosamente