Tem um main.xml, tela1.xml (é uma listview), tela2.xml (Tela de Cadastro). Como faço para voltar para o main quando estiver na tela2?
Código do botão Voltar que está na tela2.xml:
voltar = (ImageButton) findViewById(R.id.btVoltar);
voltar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Evento ao clicar no botão Voltar
setResult(RESULT_CANCELED);
setContentView(R.layout.main);
}
});
Uma coisa estranha que esta acontecendo é: Quando clico na Aba Clientes, chama normalmente a tela2, se clicar no botão voltar do emuladore, sai do programa. Se clico botão voltar que criei, a tela some ficando somente as abas e se clico novamente na AbaClientes, não aparece nada. Não sei o que está acontecendo.
Por padrão o botão voltar do Android vai pra Activity anterior. Ou seja, se o teu programa tem somente uma activity com tabs internas, ao pressionar voltar ele realmente vai sair do programa.
Pra “corrigir” isso, você pode customizar o back button e mandar ele trocar de aba. Algo assim:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
int currentTab = this.getTabHost().getCurrentTab();
if (currentTab != 0) {
this.getTabHost().setCurrentTab(currentTab - 1);
return true;
}
}
return super.onKeyDown(keyCode, event);
}
Aproveitando a deixa, queria saber também como pegar o id de um item na combobox, spinner. Eu preencho ela assim:
void carregaCombo(){
// Identifica o Spinner no layout
final Spinner comboClientes = (Spinner) findViewById(R.id.comboClientes);
final List<String> nomes = new ArrayList<String>();
// final String nome;
mDb.open();
Cursor clientes = mDb.getTodosClientes();
while (clientes.moveToNext()) {
nomes.add(clientes.getString(clientes.getColumnIndex(DbAdapter.KEY_NOME)));
// nomes.add(clientes.getString(1));
}
// Cria um ArrayAdapter usando um padrão de layout da classe R do android,
// passando o ArrayList nomes
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, nomes);
ArrayAdapter<String> spinnerArrayAdapter = arrayAdapter;
spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_item);
comboClientes.setAdapter(spinnerArrayAdapter);
clientes.close();
}
Queria selecionar o nome no spinner e automaticamente mostrar o id dele.
Vamos por partes. Pelo que eu entendi você quer um botão que volte as abas. É isto? Se for, acho que você deveria colocar o botão na tab principal (aí ele ficará visível em todas as abas).
Se não for isto, o que o botão exatamente deve fazer?
Mas pelo que entendi o teu main.xml contém as abas (tela1.xml, tela2.xml). Ou seja, tudo que tu pode fazer é voltar para outra aba (da 2 para 1, por exemplo). Ou você tem mais uma activity principal além de todas essas?
tela que contém as abas = main.xml (TabWidgetActivity)
tab1 = tela1.xml (AppTela1)
tab2 = tela2.xml (AppTela2)
Estando na tela2, você quer voltar pra tela1 ao clicar no botão voltar, certo? Neste caso, você precisa chamar, a partir da classe AppTela2, um método em TabWidgetActivity. Para isto, você precisa definir um método que faz isto dentro da classe TabWidgetActivity:
public void voltarTab(){
int currentTab = this.getTabHost().getCurrentTab();
if (currentTab != 0) {
this.getTabHost().setCurrentTab(currentTab - 1);
}
}
Dentro da classe AppTela2, você precisa chamar este método: