2012-10-23 11 views
7

Sto cercando le migliori pratiche sull'utilizzo della navigazione a schede con la barra di azione sherlock. Qual è il modo corretto di modificare i frammenti e aggiungere frammenti allo stack backstack e cancellare lo stack posteriore quando viene selezionata un'altra scheda.Le migliori pratiche per la navigazione a schede?

Ci sono dei buoni esempi o progetti open source che mostrano come farlo nel modo giusto?

risposta

6

Non userei l'ABS direttamente per farlo. Si incontreranno dei problemi una volta che le schede richiedono il passaggio dei frammenti, ecc. Penso che l'approccio giusto per fare ciò sia usare ViewPagerIndicator, che è compatibile con ABS. Come bonus ottieni anche il passaggio a destra-sinistra tra le schede. È necessario il pacchetto compat (come per ABS), esempio di utilizzo che è possibile trovare nello samples folder.

+0

Ma c'è un modo per aggiungere frammenti allo stack posteriore con un cercapersone? In questo momento sto gestendo i miei frammenti di nuovo stack per ogni scheda. – meh

+0

Non ho avuto questo caso. Immagino che dipenda molto da come vuoi che il backstack si comporti. È possibile registrarsi per l'evento della pagina di modifica e cancellare il backstack se si desidera mantenere solo la cronologia all'interno delle schede. Se vuoi che il pulsante Indietro ti riporti anche in altre schede, diventa decisamente più complicato. Ma questo non dovrebbe essere così semplice usando l'approccio delle schede native. – stoilkov

+0

Puoi aggiungere alla tua risposta qualche esempio di base di implementazione di ViewPagerIndicator? e quali pacchetti devo usare per farlo funzionare su versioni Android precedenti come 2.2. – meh

6

Come Edgar parlano del android navigation guide è un buon punto di partenza. Ma lasciatemi aggiungere alcuni commenti su come le schede devono funzionare con Android.

Le nuove schede di Acitonbar dovrebbero essere implementate nello stesso modo in cui funziona nell'app di Google Play. Ciò significa che non appena si desiderano dettagli di alcuni contenuti all'interno di una scheda, si passa a una nuova vista/frammento/attività e le schede scompaiono.

Quindi le schede per Android non dovrebbero essere visibili tutto il tempo ma solo nella gerarchia superiore. Se vuoi facilitare la navigazione per l'utente, implementerai il pulsante su in modo che l'utente possa tornare rapidamente alla gerarchia superiore, dove le schede sono visibili.

Tutorial e campioni

Il mio esempio preferito e un'esercitazione è il tabs tutorial sotto il tutorial ActionBar sulla pagina web Googles.

Esempi di navigazione tramite tabulazioni possono essere trovati anche nel progetto samples fornito con android-sdk. Vai a: android-sdk\extras\android\support\samples\Support4Demos\src\com\example\android\supportv4\app E cercare: FragmentTabs.java o FragmentTabsPager.java.

Se si desidera utilizzare ActionBarSherlock, è possibile anche download ActionBarSherlock e osservare la cartella degli esempi nella directory/samples. Qui ci sono tab demo in TabNavigation.java e TabNavigationCollapsed.java. Anche se penso che dovresti dare un'iniziativa al tutorial sulla barra delle azioni.

Tabs con schienale pila

permette anche di dire che si desidera avere una barra delle schede che è visibile per tutto il tempo (anche se non è consigliabile). Quindi devi creare uno stack posteriore personalizzato per ogni scheda, Puoi guardare here per un esempio di come implementarlo.

Mappe e schede

Date un'occhiata a tutte le applicazioni che utilizzano Googles Map. Google utilizza i pulsanti della barra delle azioni con overflow per navigare. Quindi, dovremmo noi sviluppatori, ma con Google mapsv2 per le schede Android con le mappe è diventato molto più facile se qualcuno dovrebbe desiderare di farlo.

+0

mi ha davvero aiutato! grazie! –

1

Ho eseguito ActionbarSherlock con frammenti e schede molte volte e funziona perfettamente.

Hai bisogno di un TabListener:

import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentTransaction; 

import com.actionbarsherlock.app.ActionBar; 
import com.actionbarsherlock.app.ActionBar.Tab; 
import com.android.wifilogger.R; 

public class WifiTabListener implements ActionBar.TabListener { 
     public Fragment fragment; 
     public MainTabActivity act; 

     public WifiTabListener(Fragment fragment, MainTabActivity act) { 
     this.fragment = fragment; 
     this.act = act; 
     } 


     @Override 
     public void onTabSelected(Tab tab, FragmentTransaction ft) { 
      ft.replace(R.id.root, fragment); 
     } 

     @Override 
     public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
      ft.remove(fragment); 
     } 

     @Override 
     public void onTabReselected(Tab tab, FragmentTransaction ft) { 
     } 
} 

e la configurazione del TabActivity:

public class MainTabActivity extends SherlockFragmentActivity { 

public ActionBar actionBar; 
private ActionBar.Tab listTab; 
public MenuItem refreshItem; 
private SherlockFragment listFragment; 
private SherlockFragment mapFragment; 



@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    // getActionBar().setDisplayHomeAsUpEnabled(true); 


    actionBar = getSupportActionBar(); 

    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

    setContentView(R.layout.main); 

    ActionBar.Tab settingsTab = actionBar.newTab().setText("Settings") 
      .setTag("settings"); 
    listTab = actionBar.newTab().setText("Wifi List") 
      .setTag("list"); 
    ActionBar.Tab mapTab = actionBar.newTab().setText("Map").setTag("map"); 

    SherlockFragment settingsFragment = new SettingsFragment(); 
    listFragment = new WifiListFragment(); 
    mapFragment = new WifiMapFragment(); 

    settingsTab.setTabListener(new WifiTabListener(settingsFragment, this)); 
    listTab.setTabListener(new WifiTabListener(listFragment, this)); 
    mapTab.setTabListener(new WifiTabListener(mapFragment, this)); 

    actionBar.addTab(listTab,false); 
    actionBar.addTab(mapTab,false); 
    actionBar.addTab(settingsTab,false); 
    actionBar.selectTab(listTab); 

} 

Dove devi cambiare SettingsFragment, MapFragment e ListFragment alle proprie frammenti. Puoi anche aggiungere un DialogFragment in uno di questi tabfragments usng setTargetFragment ma questa non è la tua domanda, immagino.

Problemi correlati