Come gestire il button di back utilizzando il pager di visualizzazione?

Ho due frammenti Frag A e Frag B che vengono resi usando il pager di vista. Se l'utente ha spazzato da A a B, quindi premendo il tasto di return (quando in B) l'utente deve andare a A invece di uscire dal pager. Come possiamo raggiungere questo risultato ?

Aggiunta di transazione a backstack non sembra aiutare.

  • Che cos'è una buona libreria per analizzare espressioni matematiche in java?
  • DOMException: play () può essere avviato solo da un gesto dell'utente
  • Come rilevare quando il dispositivo cambia da modalità ritratto a paesaggio?
  • Piccolo problema sulla cartella dati DDMS
  • Imansible analizzare l'arrays di Json usando Gson
  • Android Expandable ListView scorre automaticamente in basso quando faccio clic sul gruppo
  • Grazie

  • Android: Invio di file al server: PHP riceve quel file nel server
  • Audio Android: cambia passo
  • Google App Engine - scala automatica con sempre in esame?
  • Metodo SQLiteDatabase.query
  • Come può il codice sorgente Android non avere un metodo principale e ancora eseguito?
  • Come aprire il gestore AVD su Ubuntu Linux dalla row di command?
  • 2 Solutions collect form web for “Come gestire il button di back utilizzando il pager di visualizzazione?”

    È necessario ignorare il metodo onKeyDown() nell'attività.

     @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { myViewPager.setCurrentItem(0, true); return true; } else { return super.onKeyDown(keyCode, event); } } 

    Ciò cattura l'evento di printing "indietro" e invia l'utente alla prima voce di ViewPager.

    C'è anche ViewPager # getCurrentItem () che può essere utilizzato per tornare solo se l'utente ha spazzato. Un'applicazione come questa:

     @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); } } 

    invierebbe l'utente alla pagina precedente solo se l'utente era nella pagina successiva. Altrimenti, registrerà normalmente il "back" e l'utente uscirà come previsto.

    Potrebbe essere utile il caso in cui l'utente torna alla pagina precedente (presupponendo di avere più di due pagine). In questo caso, si desidera implementare il ViewPager.OnPageChangeListener () e salvare la posizione each volta che viene chiamato onPageSelected(int position) . Se li implementi in uno stack, puoi spingerli each volta che l'utente preme "indietro". Una volta che la pila è vuota, uscire dall'app.

    EDIT

    Come giustamente indicato nelle osservazioni di Jade Byfield, un modo leggermente più facile per farlo è quello di utilizzare onBackPressed() nell'attività. Questo functionrà solo nei 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. } } 

    Penso che un approccio migliore sarebbe quello di debind la gestione del back key ai rispettivi frammenti. Ho usato un CustomFragment che support un metodo per gestire la chiave di back. Tutti i frammenti verranno estesi da questo CustomFragment.

     public abstract class BackKeyHandlingFragment extends Fragment { public abstract boolean handleBackKey(); } 

    L'attività può debind l'elaborazione backKey al frammento corrente. I frammenti possono eseguire le azioni richieste nella rispettiva implementazione del metodo handleBackKey. Il metodo può restituire true per indicare l'attività per non elaborare il tasto indietro. Per andare avanti con l'azione di back key predefinita a livello Attività, il metodo può restituire false.

     public void onBackPressed() { BackKeyHandlingFragment fragment = (BackKeyHandlingFragment) mSectionsPagerAdapter.getItem(mViewPager.getCurrentItem()); // Fragment should return boolean according to app requirements after processing back key if (!fragment.handleBackKey()) { super.onBackPressed(); } } 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.