2012-04-13 19 views
26

Uno dei principali consigli di progettazione in Android 4.0 per le schede è tra allow swiping tra loro, se necessario. Questo comportamento consente agli utenti di scorrere orizzontalmente tra i contenuti della scheda selezionata per navigare nelle schede adiacenti, senza necessità di interagire direttamente con le schede stesse.Come implementare lo scorrimento tra le schede su Android?

Come può essere implementato?

risposta

34

NOTA: Questo è un estratto dal Android Training classe Implementing Effective Navigation.


Per attuare questo (in Android 3.0 o superiore), è possibile utilizzare un ViewPager in collaborazione con l'API ActionBar schede.

Dopo aver modificato la pagina corrente, selezionare la scheda corrispondente. È possibile impostare questo comportamento utilizzando un ViewPager.OnPageChangeListener nel metodo di vostra attività onCreate():

@Override 
public void onCreate(Bundle savedInstanceState) { 
    ... 
    mViewPager.setOnPageChangeListener(
      new ViewPager.SimpleOnPageChangeListener() { 
       @Override 
       public void onPageSelected(int position) { 
        // When swiping between pages, select the 
        // corresponding tab. 
        getActionBar().setSelectedNavigationItem(position); 
       } 
      }); 
    ... 
} 

E su selezione di una scheda, passare alla pagina corrispondente nel ViewPager. Per fare questo, aggiungere un ActionBar.TabListener alla scheda durante la creazione utilizzando il metodo newTab():

actionBar.newTab() 
     ... 
     .setTabListener(new ActionBar.TabListener() { 
      public void onTabSelected(ActionBar.Tab tab, 
        FragmentTransaction ft) { 
       // When the tab is selected, switch to the 
       // corresponding page in the ViewPager. 
       mViewPager.setCurrentItem(tab.getPosition()); 
      } 
      ... 
     })); 
+1

Hi Roman, Si prega di elaborare un esempio che implementa un adattatore di form per implementare lo scorrimento di layout multi-riquadro contenente più frammenti creati/sostituiti dinamicamente. Sfide: - FragmentManager utilizza un ID risorsa per aggiungere frammenti; Gli ID devono essere univoci tra le pagine (non è possibile specificare un'istanza ViewGroup come contenitore) - Le viste del contenitore devono esistere prima che FragmentManager tenti di ripristinare i frammenti - Istanze rimanenti vs errore di modifica dell'orientamento # 1: NullPointerException intorno a quando FragmentManager tenta di salvare Stato del frammento; # 2: NullPointerException su LoaderInfo.onLoadComplete – user289463

+1

Dovresti fare questa domanda come una nuova domanda. –

+0

Le cose strane accadono se si aggiungono le icone del menu alla barra delle azioni e si utilizza ViewPager in questo modo ... – Maxim

12

Se si prendono di mira le API di sotto Android 3.0, non è possibile utilizzare la soluzione di Roman sopra.

Ho scritto un blog post here su come realizzare la stessa cosa con ActionBarSherlock se qualcuno è interessato.

+0

È possibile utilizzare la soluzione per le versioni precedenti se si aggiunge la libreria di supporto della compatibilità Android http://developer.android.com/tools/extras/support-library.html. Con l'ultimo plugin ADT di Eclipse è facile come fare clic con il pulsante destro del mouse sul progetto e selezionare 'Strumenti Android'>' Aggiungi libreria di supporto'. Il progetto dovrà essere costruito contro API 14 o successive (cioè Android 4+) mentre si utilizza un manifest con ad es. '' per funzionare su Android 2.1. – ccpizza

+1

@ JesperB-Cosa succede se ho bisogno di implementare Swipe tra le schede nel mio TabHost per le API di targeting per app Android sotto Android 2.3.3 e senza usare ActionBarSherlock .. ?? Puoi suggerirmi qualcosa per quello .. ?? –

+1

@ JesperB-In realtà ho già fatto funzionare perfettamente l'app con tabview ... Devo solo aggiornare la funzionalità di Swipe !! –

Problemi correlati