Implementar navegação entre telas utilizando padrão Controller

7 respostas
Fernando_Mateus

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?

7 Respostas

felipebonezi

Você quer tratar os eventos de click nos botões em outra classe??

ctosin

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.

Fernando_Mateus

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,

Fernando_Mateus

Estou fazendo um projeto da disciplina de POO, daí estamos implementando desta maneira para aprender alguns desses padrões.

ctosin

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!

Fernando_Mateus

Ok, consegui resolver usando o singleton, uma ótima solução!
Agradeço a ajuda de todos!

Att,
Fernando Mateus de Oliveira

F

Fernando Mateus,

Eu estou tendo o mesmo problema que você no meu caso é para o meu TCC,  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  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

Criado 3 de dezembro de 2011
Ultima resposta 9 de dez. de 2013
Respostas 7
Participantes 4