Problema - Botão voltar

Olá, estou começando a fazer um aplicativo
Tenho uma pergunta de noob

To com um problema na questão de utilizar o botão voltar, o aplicativo vai ter varias telas, e sempre que pressionado uma vez o botão, quero que ele volte para anterior
O problema é que estou fazendo algo errado, abaixo o codigo e o erro

package com.example.app1;

import android.os.Bundle;
import android.app.Activity;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.View;
import android.widget.Button;

public class app1 extends Activity {
Button bt1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_app);

	bt1 = (Button) findViewById(R.id.bt1);
	bt1.setOnClickListener(new View.OnClickListener() {
		
[b]@Override // Aqui esta o problema, o botão funciona, mas quando volta para a primeira tela, o botão não funciona mais, e o app(obviamente) fica so na tela 1, pois sobescrevi o comando voltar...como poderia resolver isso ?[/b]
public void onBackPressed(){
	setContentView(R.layout.activity_app);
	
}

		@Override
		public void onClick(View v) {
			tela1();//chama a tela ao clicar
		}
		
	});
	
}


public void tela1(){
	setContentView (R.layout.p);
	
}




@Override
public boolean onCreateOptionsMenu(Menu menu) {
	// Inflate the menu; this adds items to the action bar if it is present.
	getMenuInflater().inflate(R.menu.app_menui, menu);
	
	return true;
}

}

Não sei se eu entendi o que tu quer.

Tu quer que em qualquer tela, a qualquer momento, o botão voltar leve o usuário de volta para a primeira tela?
Se for isso, o comando parece correto.

Caso tu queira que o voltar leve o usuário para uma tela antes (na hierarquia do software), ai terá de criar um voltar em cada activity.

Exemplo:

activityMain tem um botão que leva para activitySearch, e está tem um botão que leva para activityCadastro.

activitySearch terá de ter um voltar para activityMain, e activityCadastro terá um voltar para activitySearch.

Caso tu queira voltar para QUALQUER LUGAR de onde tu veio, com qualidade e sem repetir telas, ai o buraco é um pouco mais embaixo.

Arutur,

O meu programa é bem simples, ao meu ver

Tela1, BT1 - Tela2, BT2 - Tela3 (informações, textos)

Sim,

Caso tu queira voltar para QUALQUER LUGAR de onde tu veio, com qualidade e sem repetir telas, ai o buraco é um pouco mais embaixo.

Poderia me dar uma luz ?

Obrigado

O voltar, naturalmente, volta para a última tela.

Só que se tu ficar dando voltas, isso gera um problema.

main -> search -> cadastro
seria a hierarquia.

Mas o usuário pode ficar indo várias vezes do search para o cadastro, e depois, ao usar o voltar “natural” do sistema, vai ficar voltando de uma tela para outra, que nem barata tonta.
Existe uma lógica de administração do Voltar, que eu nunca apliquei… acho que li uma vez em um dos livros do Ricardo Lecheta.

Vou ver isso quando chegar em casa (até porque eu fiquei curioso, uma hora dessas precisarei aplicar isso). Se eu achar uma boa resposta, posto aqui.

Mas dou uma dica:
A plataforma Android tem uma série de limitações. A política de simplificar é bem vinda.
Daqui a pouco criar uma estrutura FIXA de voltar vale mais a pena.
Da tela principal não voltará mais para lugar algum, eu sei… mas na real isso é bom, visto que é meio padrão no Android, que o botão de voltar na tela principal é também o botão de SAIR.

Acabei resolvendo o problema com o auxilio de um camarada de outro forum

Tinha mais erros, estava usando setContentView(R.layout.activity_app);
Dessa forma foi alterado aplicando uma intent
Eu estava chamando somente o xml, deixando as funções definidas nas activities de lado, assim qualquer coisa que eu colocasse no código, não iria dar certo

Acabei achando outros erros, eu estava somente com 1 activity, e necessito de 1 para cada tela. Acabei visualizando esse erro depois do post, fiz outro app e o erro persistiu, após o Kaito me mostrou o erro do setContentView.

Sendo a correção ficou assim;

public void tela1(){
Intent i = new Intent(App.this, tela2.class);
startActivity(i);
}

E no onBackPressed() esta o finish();

Essa técnica pode ser usada para mais telas

Abraços

Achei que teu problema era outro.
Acho que te confundi mais só!

Que bom que conseguiu resolver.
Ainda assim, esta lógica de navegar entre as páginas e usar o botão voltar deve ser bem pensada. Mais adianta talvez tu volte a pensar nesse assunto.

Não li as repostas dos colegas, mas…

Por que raios voce está dando um setContentView no onBackPressed?

Só para constar, para cada Activity você deve chamar esse método uma unica vez, não que não funcione, mas todo o estado antigo, binds de views e valores são perdidos dessa forma.