Лучшие практики для вкладка "навигация"?
Я ищу лучшую практику использования навигации по вкладкам с помощью Sherlock actionbar. Каков правильный способ изменения фрагментов и добавления фрагментов в backstack и очистки заднего стека при выборе другой вкладки.
есть ли хорошие примеры или проекты с открытым исходным кодом, показывающий как это делать правильно?
4 ответов
Я бы не использовал ABS напрямую для этого. Вы столкнетесь с проблемой, как только ваши вкладки требуют переключения фрагментов и т. д. Я думаю, что правильный подход для этого-использовать ViewPagerIndicator, который совместим с ABS. В качестве бонуса вы также получаете салфетки вправо-влево между вкладками. Вам нужен пакет compat (например, для ABS), пример использования вы можете найти в образцы папке.
как Эдгар упомянул навигация для Android руководство - это хорошее место для начала. Но позвольте мне добавить несколько комментариев к тому, как вкладки предназначены для работы с android.
новые вкладки acitonbar должны быть реализованы так же, как это работает в приложении google play. Это означает, что, как только вы хотите получить некоторую информацию о содержимом вкладки, вы перейдете к новому представлению/фрагменту/действию, и вкладки исчезнут.
поэтому вкладки для android не должны быть видны все время, но только в высшей иерархии. Если вы хотите облегчить навигацию для пользователя, вы реализуете кнопку "вверх", чтобы пользователь мог быстро вернуться в верхнюю иерархию, где видны вкладки.
учебник и образцов
мой личный любимый пример и учебник является вкладки учебник в учебнике actionbar на веб-странице googles.
примеры навигации по вкладкам также можно найти в проекте samples которые поставляются с Android-sdk. Перейти к:android-sdk\extras\android\support\samples\Support4Demos\src\com\example\android\supportv4\app
И ищи:FragmentTabs.java
или FragmentTabsPager.java
.
если вы хотите использовать ActionBarSherlock вы также можете скачать ActionBarSherlock и посмотрите на папку samples в каталоге /samples. Там у вас есть tab demoes в TabNavigation.java
и TabNavigationCollapsed.java
. Хотя я думаю, что вы должны дать учебник actionbar выстрел.
вкладки с задним стеком
также позволяет сказать, что вы хотите иметь панель вкладок, которая видимый все время (хотя это не рекомендуется). Затем вы должны сделать пользовательский стек для каждой вкладки, вы можете посмотреть здесь для примера того, как это реализовать.
карты и вкладки
взгляните на все приложения Googles, которые используют Map. Google использует кнопки переполнения actionbar для навигации вокруг. Так что мы, как разработчики, но с Google mapsv2 для Android вкладки с картами стало намного проще, если кто следует желать этого.
Я сделал ActionbarSherlock с фрагментами и вкладками много раз, и его работа замечательная.
вам нужен 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) {
}
}
и настройка 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);
}
где вы должны изменить SettingsFragment, MapFragment и ListFragment на свои собственные фрагменты. Вы также можете добавить DialogFragment в один из этих tabfragments usng setTargetFragment, но это не ваш вопрос, я думаю.
Я рекомендую вам следовать шаблонам дизайна Android для навигации:
http://developer.android.com/design/patterns/navigation.html