Школьник Android с вкладками

Введите описание изображения здесь

Я пытаюсь реализовать ActionBar Sherlock с вкладками ниже, как показано в приведенном выше wire-frame.

Должен ли я использовать TabActivity? – поскольку я видел, что он устарел. Это лучший способ добиться того же.

Я реализовал эту функциональность с помощью приложения SherlockFragmentActivity в виде контейнера tabview и в качестве вкладок в качестве вкладок SherlockFragment . Вот эскиз (я пропустил обычный материал для Android):

Это вкладка с двумя вкладками:

 public class TabViewActivity extends SherlockFragmentActivity { // store the active tab here public static String ACTIVE_TAB = "activeTab"; @Override public void onCreate(Bundle savedInstanceState) { .. final ActionBar actionBar = getSupportActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); // add the first tab which is an instance of TabFragment1 Tab tab1 = actionBar.newTab() .setText("TabTitle1") .setTabListener(new TabListener<TabFragment1>( this, "tab1", TabFragment1.class)); actionBar.addTab(tab1); // add the second tab which is an instance of TabFragment2 Tab tab2 = actionBar.newTab() .setText("TabTitle2") .setTabListener(new TabListener<TabFragment2>( this, "tab2", TabFragment2.class)); actionBar.addTab(tab2); // check if there is a saved state to select active tab if( savedInstanceState != null ){ getSupportActionBar().setSelectedNavigationItem( savedInstanceState.getInt(ACTIVE_TAB)); } } @Override protected void onSaveInstanceState(Bundle outState) { // save active tab outState.putInt(ACTIVE_TAB, getSupportActionBar().getSelectedNavigationIndex()); super.onSaveInstanceState(outState); } } 

И это TabFragment который содержит содержимое вкладки:

 public class TabFragment extends SherlockFragment { // your member variables here @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.fragment_va_esh, container, false); ... // do your view initialization here return view; } } 

И, наконец, это TabListener который обрабатывает переключатели табуляции:

 public class TabListener<T extends Fragment> implements ActionBar.TabListener{ private TabFragment mFragment; private final Activity mActivity; private final String mTag; private final Class<T> mClass; public TabListener(Activity activity, String tag, Class<T> clz) { mActivity = activity; mTag = tag; mClass = clz; } public void onTabSelected(Tab tab, FragmentTransaction ft) { // Check if the fragment is already initialized if (mFragment == null) { // If not, instantiate and add it to the activity mFragment = (TabFragment) Fragment.instantiate( mActivity, mClass.getName()); mFragment.setProviderId(mTag); // id for event provider ft.add(android.R.id.content, mFragment, mTag); } else { // If it exists, simply attach it in order to show it ft.attach(mFragment); } } public void onTabUnselected(Tab tab, FragmentTransaction ft) { if (mFragment != null) { // Detach the fragment, because another one is being attached ft.detach(mFragment); } } public void onTabReselected(Tab tab, FragmentTransaction ft) { // User selected the already selected tab. Usually do nothing. } } 

Я считаю, что TabActivity устарела в пользу использования фрагментов – не потому, что табуляция навигации является устаревшей концепцией. Просто используйте фрагменты и TabWidget.

Кроме того, вот аналогичный вопрос .

Редактировать:

Вот пример любезности Google: Android Tabs Fragment Way

Intereting Posts
Расположение Android, кнопки настройки имеют одинаковый размер Android Widget для Android: настройка Android: отслеживание приводит к тому, что большой палец и дорожка не отображаются Facebook SDK v4 LoginButton игнорирует настройки XML Полосы прокладки остаются при прокрутке GridView TextView с цветом фона и межстрочным интервалом Является ли api ключом в аттестации SafetyNet? Выполняется ли TimerTask в новом потоке Как сжать размер изображения? Android: намерение фильтра для конкретного шаблона Uri Службы Google Play: как проверить, есть ли в настоящий момент «активный» ожидающий обратный вызов намерения, зарегистрированный для обновления местоположения или распознавания активности? Переменная «runnable» должна быть инициализирована Шаблоны текстовых полей для дизайна материалов для Android Инициализировать соединение Bluetooth между Android (сервером) и bluecove на ПК (клиент) Макет на Samsung Galaxy Note Ошибка отправки результата ResultInfo {who = null, request = 1, result = -1, data = Intent {(имеет дополнительные функции)}} для активности; java.lang.NullPointerException