Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
contedevel
57 / 55 / 8
Регистрация: 07.10.2012
Сообщений: 596
#1

Tabs в ActionBarCompat (support_v7_appcompat) - Программирование Android

16.08.2013, 12:03. Просмотров 1145. Ответов 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, но отображаемый вид из фрагмента перекрывает табы и бар, т.е. выводить на весь экран. Кто знает как это исправить?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.08.2013, 12:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Tabs в ActionBarCompat (support_v7_appcompat) (Программирование Android):

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

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

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Digetix
104 / 104 / 1
Регистрация: 09.04.2012
Сообщений: 651
16.08.2013, 12:07 #2
Цитата Сообщение от contedevel Посмотреть сообщение
но отображаемый вид из фрагмента перекрывает табы и бар
А вы отдельно ЭкшнБар прописывали? Чтоб он там был. Или посмотрите какая тема стоит
contedevel
57 / 55 / 8
Регистрация: 07.10.2012
Сообщений: 596
16.08.2013, 12:13  [ТС] #3
Нашел еще ошибку, виды из фрагментов накладываются друг на друга
Вот код 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-ах фрагментов для табов пробовал разные темы результат один и тот же(
Digetix
104 / 104 / 1
Регистрация: 09.04.2012
Сообщений: 651
16.08.2013, 12:19 #4
А покажите Манифест
contedevel
57 / 55 / 8
Регистрация: 07.10.2012
Сообщений: 596
16.08.2013, 12:20  [ТС] #5
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>
Digetix
104 / 104 / 1
Регистрация: 09.04.2012
Сообщений: 651
16.08.2013, 12:28 #6
Так у вас разные темы для разных активити стоят. Попробуйте поставить одну тему 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" >
contedevel
57 / 55 / 8
Регистрация: 07.10.2012
Сообщений: 596
16.08.2013, 12:30  [ТС] #7
Цитата Сообщение от 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>
contedevel
57 / 55 / 8
Регистрация: 07.10.2012
Сообщений: 596
16.08.2013, 12:48  [ТС] #8
Кто-нибудь может выложить работающий пример Tab-ов с использованием этой библиотеки?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.08.2013, 12:48
Привет! Вот еще темы с ответами:

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

Tabs Bootstrap - HTML, CSS
Объясните пожалуйста, как делать табы в Bootstrap? на сайте layoutit.com можно добавлять элементы, но там только 2, если изменить...

dj tabs и Artisteer - Joomla
Привет всем. Подскажите как можно реализовать на jooml 2.5.11., несколько материалов на одной страницу. Тобишь, на одной странице было...

CSS для tabs() - jQuery
Срочно необходима помощь !!! при изучении jquery дойдя до tabs() уперся в создание для него CSS файла, везде предлогают подключить...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
16.08.2013, 12:48
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru