2012-10-23 23 views
7

Poszukuję najlepszej praktyki używania nawigacji po tabulatorze z paskiem akcji sherlock. Jaki jest właściwy sposób zmiany fragmentów i dodawania fragmentów do backstacku oraz czyszczenie tylnego stosu po wybraniu innej karty.Najlepsza praktyka nawigacji po kartach?

Czy są jakieś dobre przykłady lub projekty open source pokazujące, jak to zrobić dobrze?

Odpowiedz

6

Nie użyłbym ABS bezpośrednio do tego. Będziesz mieć kłopoty, gdy twoje zakładki wymagają zmiany fragmentów itp. Myślę, że właściwym podejściem do tego jest użycie ViewPagerIndicator, który jest kompatybilny z ABS. Jako bonus dostaniesz również przesunięcie w prawo i lewo pomiędzy kartami. Potrzebny jest pakiet compat (np. Dla ABS), przykład użycia można znaleźć w samples folder.

+0

Ale czy istnieje sposób dodawania fragmentów do tylnego stosu za pomocą pagera widoku? W tej chwili zarządzam własnymi fragmentami z tyłu stosu dla każdej karty. – meh

+0

Nie miałem takiego przypadku. Sądzę, że to bardzo zależy od tego, jak chcesz, aby zachował się backstack. Możesz zarejestrować się na stronie zmiany strony i wyczyścić ten back-back, jeśli chcesz zachować historię tylko w kartach. Jeśli chcesz, aby przycisk "Wstecz" również przenosił cię z powrotem w inne zakładki, zdecydowanie bardziej się komplikuje. Ale nie powinno to być tak łatwe przy użyciu natywnego podejścia do kart. – stoilkov

+0

Czy możesz dodać do odpowiedzi jakiś podstawowy przykład implementacji ViewPagerIndicator? i jakie pakiety muszę użyć, aby działał na starszych wersjach Androida, takich jak 2.2. – meh

6

Edgar wspomniał android navigation guide jest dobrym miejscem, aby rozpocząć. Ale pozwól mi dodać kilka uwag o tym, jak karty mają działać z Androidem.

Nowe karty Acitonbar powinny być zaimplementowane w taki sam sposób, jak działają w aplikacji Google Play. Oznacza to, że gdy tylko potrzebujesz szczegółów na temat niektórych treści na karcie, przejdziesz do nowego widoku/fragmentu/działania, a karty znikną.

Zakładki dla Androida nie powinny być widoczne cały czas, ale tylko w najwyższej hierarchii. Jeśli chcesz ułatwić nawigację dla użytkownika, zaimplementujesz przycisk "w górę", aby szybko powrócić do najwyższej hierarchii, w której karty są widoczne.

Tutorial i próbki

Moim ulubionym przykładem i poradnik jest tabs tutorial pod tutorialu actionbar na Googles internetowej.

Przykłady nawigacji po zakładkach można również znaleźć w projekcie przykładów dołączonym do android-sdk. Przejdź do: android-sdk\extras\android\support\samples\Support4Demos\src\com\example\android\supportv4\app i poszukaj: FragmentTabs.java lub FragmentTabsPager.java.

Jeśli chcesz użyć ActionBarSherlock, możesz także download ActionBarSherlock i zajrzeć do folderu samples w katalogu/samples. Tam masz demo karty w TabNavigation.java i TabNavigationCollapsed.java. Chociaż myślę, że powinieneś dać samouczek akcji, strzał.

Tabs z tyłu stosu

pozwala także, że chcesz mieć pasek kart, który jest widoczny cały czas (choć nie jest to zalecane). Następnie musisz utworzyć niestandardowy stos z powrotem dla każdej karty. Możesz zobaczyć here, aby dowiedzieć się, jak to zaimplementować.

Mapy i karty

Spójrz na wszystkie aplikacje, które używają gogli mapę. Google używa przycisków paska przycisków przelewu, aby nawigować za pomocą. Powinniśmy więc jako programiści, ale z Google mapsv2 dla kart Android z mapami stał się znacznie łatwiejszy, jeśli ktoś chciałby to zrobić.

+0

to mi naprawdę pomogło! Dziękuję Ci! –

1

Zrobiłem ActionbarSherlocka z fragmentami i zakładkami wiele razy i jego działanie było wspaniałe.

Musisz 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) { 
     } 
} 

i konfiguracji 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); 

} 

gdzie trzeba zmienić SettingsFragment, MapFragment i ListFragment własnych fragmentów. Możesz także dodać DialogFragment w jednym z tych tabfragments przez usng setTargetFragment, ale to nie jest twoje pytanie.

Powiązane problemy