Devi eseguire l'override del metodo onKeyDown()
nel Activity
.
Questo catturerà l'evento di stampa del pulsante "indietro" e invierà l'utente al primo elemento nel ViewPager.
C'è anche ViewPager#getCurrentItem() che può essere utilizzato per tornare indietro solo se l'utente ha fatto scorrere. Un'implementazione come questo:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && myViewPager.getCurrentItem() == 1) {
myViewPager.setCurrentItem(0, true);
return true;
} else {
return super.onKeyDown(keyCode, event);
}
}
avrebbe mandato l'utente torna alla pagina precedente solo se l'utente è alla pagina seguente. Altrimenti, registrerà normalmente il "ritorno" e l'utente uscirà come previsto.
Si consiglia il caso in cui l'utente ritorna alla pagina precedente (presupponendo che siano presenti più di due pagine). In tal caso, si desidera implementare lo ViewPager.OnPageChangeListener() e salvare la posizione ogni volta che viene chiamato onPageSelected(int position)
. Se li implementi in uno stack, puoi saltarli fuori ogni volta che l'utente preme "indietro". Una volta che lo stack è vuoto, esci dall'app.
EDIT
Come indicato correttamente nei commenti di Jade Byfield, un modo un po 'più facile fare questo sarebbe quella di utilizzare onBackPressed()
in attività. Funzionerà solo con livelli API 5+.
@Override
public void onBackPressed() {
if(i_dont_want_to_leave) {
myViewPager.setCurrentItem(0, true);
} else {
super.onBackPressed(); // This will pop the Activity from the stack.
}
}
Potrebbe anche eseguire l'override suBackPressed? O è solo per le API precedenti? –
L'uso di onKeyDown() funziona su ogni livello dell'API della piattaforma 1+. Inoltre, a meno che non lo stia usando sempre, onBackPressed non impedirà che l'attività venga spuntata dallo stack. Se ritorni 'true' in' onKeyDown() ', allora questa sarà l'unica cosa che accadrà e l'evento si fermerà a cascata. – DeeV
Attendi. Ho appena avuto una discarica cerebrale. Sì. Può usare onBackPressed() se vuole targetizzare API 5+. Basta non chiamare 'super.onBackPressed() 'a meno che tu non sia assolutamente sicuro di voler uscire. – DeeV