Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
 Аватар для contedevel
57 / 55 / 13
Регистрация: 07.10.2012
Сообщений: 606

Tabs в ActionBarCompat (support_v7_appcompat)

16.08.2013, 12:03. Показов 1724. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Использую библиотеку ActionBarCompat от Google, Шерлок мне так и не удалось подключить, а эта отлично работает. Только я никак не пойму, как правильно в ней реализовать tab-ы в ActionBarCompat? Конкретно, как реализовать TabListener в методе newTab.setTabListener(), чтобы он встраивал FragmentActivity?

Т.е. что-то вроде этого:
Java
1
tab1 = actionBar.newTab().setText(R.string.week1).setTabListener(new TabListener<Week1Fragment>(this, "week1", Week1Fragment.class));
Вот сам класс:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package com.contedevel.timetable;
 
import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentTransaction;
 
public class TabListener<T extends Fragment> implements ActionBar.TabListener {
 
    private Fragment mFragment;
    private final Activity mActivity;
    private final String mTag;
    private final Class<T> mClass;
 
    /** Constructor used each time a new tab is created.
      * @param activity  The host Activity, used to instantiate the fragment
      * @param tag  The identifier tag for the fragment
      * @param clz  The fragment's Class, used to instantiate the fragment
      */
    public TabListener(Activity activity, String tag, Class<T> clz) {
        mActivity = activity;
        mTag = tag;
        mClass = clz;
    }
 
    /* The following are each of the ActionBar.TabListener callbacks */
 
    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 = Fragment.instantiate(mActivity, mClass.getName());
            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.
    }
 
}


Очень нужен подобный пример, в интернете, ничего об этом не нашел. Заранее спасибо!

Добавлено через 8 часов 38 минут
С табами смог сам все же разобраться, просто изменил импорты в TabListener, но отображаемый вид из фрагмента перекрывает табы и бар, т.е. выводить на весь экран. Кто знает как это исправить?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.08.2013, 12:03
Ответы с готовыми решениями:

Содержимое ActionBar Tabs перекрывают ActionBarCompat
Здравствуйте! Уже несколько дней пытаюсь использовать ActionBar Tabs, но при запуске на старых устройствах ниже v11, view фрагмента,...

Drawer и ActionBarCompat на Android 2.2+
Здравствуйте! Никак не получается нормально сделать ActionBar и Drawer(&quot;Sliding menu&quot;) для Android 2.2+ Использую библиотеку Google...

Jsoup parser tabs
Доброго времени суток народ! Столкнулся с такой проблемой. У меня есть 3 вкладки в приложении С помощью jsoup пытаюсь спарсить сайт...

7
106 / 106 / 1
Регистрация: 09.04.2012
Сообщений: 655
16.08.2013, 12:07
Цитата Сообщение от contedevel Посмотреть сообщение
но отображаемый вид из фрагмента перекрывает табы и бар
А вы отдельно ЭкшнБар прописывали? Чтоб он там был. Или посмотрите какая тема стоит
0
 Аватар для contedevel
57 / 55 / 13
Регистрация: 07.10.2012
Сообщений: 606
16.08.2013, 12:13  [ТС]
Нашел еще ошибку, виды из фрагментов накладываются друг на друга
Вот код TabListener:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package com.contedevel.timetable;
 
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.ActionBar.Tab;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
 
public class TabListener<T extends Fragment> implements ActionBar.TabListener {
 
    private Fragment mFragment;
    private final ActionBarActivity mActivity;
    private final String mTag;
    private final Class<T> mClass;
 
    /** Constructor used each time a new tab is created.
      * @param activity  The host Activity, used to instantiate the fragment
      * @param tag  The identifier tag for the fragment
      * @param clz  The fragment's Class, used to instantiate the fragment
      */
    public TabListener(ActionBarActivity activity, String tag, Class<T> clz) {
        mActivity = activity;
        mTag = tag;
        mClass = clz;
    }
 
    /* The following are each of the ActionBar.TabListener callbacks */
 
    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 = Fragment.instantiate(mActivity, mClass.getName());
            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.
    }
 
}
Добавлено через 2 минуты
Цитата Сообщение от Digetix Посмотреть сообщение
А вы отдельно ЭкшнБар прописывали? Чтоб он там был. Или посмотрите какая тема стоит
На Layout-е для главной Activity стоит тема Compat, а на Layout-ах фрагментов для табов пробовал разные темы результат один и тот же(
0
106 / 106 / 1
Регистрация: 09.04.2012
Сообщений: 655
16.08.2013, 12:19
А покажите Манифест
0
 Аватар для contedevel
57 / 55 / 13
Регистрация: 07.10.2012
Сообщений: 606
16.08.2013, 12:20  [ТС]
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.contedevel.timetable"
    android:versionCode="1"
    android:versionName="1.0" >
 
    <uses-sdk
        android:minSdkVersion="10"
        android:targetSdkVersion="17" />
 
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.contedevel.timetable.StartActivity"
            android:label="@string/app_name" >
        </activity>
        <activity
            android:name="com.contedevel.timetable.MainActivityABC"
            android:label="@string/app_name"
            android:theme="@style/Theme.AppCompat">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter> 
        </activity>
        <activity
            android:name="com.contedevel.timetable.MainActivityHoneycomb"
            android:label="@string/app_name"
            android:theme="@style/AppThemeHoneycomb">            
        </activity>
        <activity
            android:name="com.contedevel.timetable.MainActivity"
            android:label="@string/app_name" 
            android:theme="@style/Theme.AppCompat">
        </activity>
        <activity
            android:name="com.contedevel.timetable.SettingsActivity"
            android:label="@string/title_activity_settings"
            android:parentActivityName="android.preference.PreferenceActivity" >
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="android.preference.PreferenceActivity" />
        </activity>
        <activity
            android:name="com.contedevel.timetable.SettingsOldActivity"
            android:label="@string/title_activity_settings"
            android:parentActivityName="android.preference.PreferenceActivity" 
            android:theme="@style/BlackTheme">
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="android.preference.PreferenceActivity" />
        </activity>
        <activity
            android:name="com.contedevel.timetable.EditActivity"
            android:label="@string/title_activity_edit"
            android:theme="@style/Theme.AppCompat"/>
    </application>
 
</manifest>
0
106 / 106 / 1
Регистрация: 09.04.2012
Сообщений: 655
16.08.2013, 12:28
Так у вас разные темы для разных активити стоят. Попробуйте поставить одну тему android:theme="@style/Theme.AppCompat" для
Java
1
2
3
4
5
 <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
1
 Аватар для contedevel
57 / 55 / 13
Регистрация: 07.10.2012
Сообщений: 606
16.08.2013, 12:30  [ТС]
Цитата Сообщение от Digetix Посмотреть сообщение
Так у вас разные темы для разных активити стоят. Попробуйте поставить одну тему android:theme="@style/Theme.AppCompat" для
Java
1
2
3
4
5
 <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<resources>
 
    <!--
        Base application theme, dependent on API level. This theme is replaced
        by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
    -->
    <style name="AppBaseTheme" parent="@style/Theme.AppCompat">
        <!--
            Theme customizations available in newer API levels can go in
            res/values-vXX/styles.xml, while customizations related to
            backward-compatibility can go here.
        -->
    </style>
 
    <!-- Application theme. -->
    <style name="AppTheme" parent="AppBaseTheme"></style>
    <style name="BlackTheme" parent="android:Theme.Black"></style>
    <style name="AppThemeHoneycomb" parent="android:Theme.Holo.Light.DarkActionBar"></style>
 
</resources>
0
 Аватар для contedevel
57 / 55 / 13
Регистрация: 07.10.2012
Сообщений: 606
16.08.2013, 12:48  [ТС]
Кто-нибудь может выложить работающий пример Tab-ов с использованием этой библиотеки?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.08.2013, 12:48
Помогаю со студенческими работами здесь

ActionBar Tabs наложение вкладок
Здравствуйте! Вот мой листенер на табы: package com.contedevel.timetable; import android.app.ActionBar.Tab; import...

Tabs которые заполняют весь layout
Всем привет. Мне нужно сделать вкладки (tabs) для 2 активити. Я использую ViewPager, в первом активити я прикрепляю его к appBar и он...

Как создать вкладки Tabs c ViewPager material design
Добрый день форумчане! Нужна ваша помощь! Как создать так называемый Tabs Вкладки с viewPager в API 21 (material design)? ...

BaseActivity with drawer + MainActivity + google tabs with view pager = NullPointerException
Здравствуйте! Такая проблема, у меня есть приложение, в котором drawer должен быть во всех разделах, разделов много, у каждого раздела есть...

UI Tabs . IE
Здравствуйте! Установил &quot;умные вкладки&quot; на свой сайт. Работают отлично во всех браузерах, кроме IE. В IE6, 7 и 8 все вкладки...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru