Библиотека поддержки с ActionBar и вкладками

У меня есть проект, в котором я использую библиотеку поддержки Android, чтобы включить панель действий для устройств до версии 3.0.

У меня также есть вкладки в моем проекте. Вкладки Fragments. Таким образом, я расширяю каждую вкладку из класса android.support.v4.app.Fragment из библиотеки поддержки.

Однако у меня проблема с устройствами до версии 3.0. Панель действий не отображается. Так что вкладок тоже нет.

не могу найти решение....

Итак, моя «основная активность» (которая обрабатывает ActionBar с вкладками) выглядит так:

public class Hauptmenue_extended extends ActionBarActivity implements
        OnClickListener {
actionBar = getSupportActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    Tab tabB = actionBar.newTab();
    tabB.setText("Home");
    tabB.setIcon(R.drawable.icon_home);
    tabB.setTabListener(new TabListener<Startmenue_activity>(this, "Start",
            Startmenue_activity.class));
    actionBar.addTab(tabB);

    Tab tabA = actionBar.newTab();
    tabA.setText("");
    tabA.setIcon(R.drawable.icon_nachrichten_sel);
    tabA.setTabListener(new TabListener<Nachrichten_activity>(this,
            "Nachrichten", Nachrichten_activity.class));
    actionBar.addTab(tabA);

    Tab tabC = actionBar.newTab();
    tabC.setText("");
    tabC.setIcon(R.drawable.icon_favoriten);
    tabC.setTabListener(new TabListener<Favoriten_activity>(this,
            "Favoriten", Favoriten_activity.class));
    actionBar.addTab(tabC);

И мой TabListener выглядит так:

public static class TabListener<T extends Fragment> implements
        ActionBar.TabListener {

    private final FragmentActivity myActivity;
    private final String myTag;
    private final Class<T> myClass;

    public TabListener(FragmentActivity activity, String tag, Class<T> cls) {
        myActivity = activity;
        myTag = tag;
        myClass = cls;
    }

    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {

        Fragment myFragment = myActivity.getSupportFragmentManager()
                .findFragmentByTag(myTag);

        // Check if the fragment is already initialized
        if (myFragment == null) {
            // If not, instantiate and add it to the activity
            myFragment = Fragment
                    .instantiate(myActivity, myClass.getName());
            ft.add(android.R.id.content, myFragment, myTag);
        } else {
            // If it exists, simply attach it in order to show it
            ft.attach(myFragment);
        }

    }

    @Override
    public void onTabUnselected(Tab tab, FragmentTransaction ft) {

        Fragment myFragment = myActivity.getSupportFragmentManager()
                .findFragmentByTag(myTag);

        if (myFragment != null) {
            // Detach the fragment, because another one is being attached
            ft.detach(myFragment);
        }

    }

    @Override
    public void onTabReselected(Tab tab, FragmentTransaction ft) {
        // TODO Auto-generated method stub

    }

}

И каждый фрагмент или вкладка выглядит так:

public class Nachrichten_activity extends Fragment implements
    OnChildClickListener, OnClickListener { ...

У кого-нибудь есть идея? :)


person Maximus1809    schedule 16.09.2013    source источник
comment
Как насчет темы приложения/активности в манифесте?   -  person f2prateek    schedule 17.09.2013
comment
Почему вы внедряете OnClickListener в свою активность?   -  person wyoskibum    schedule 17.09.2013
comment
Я использую следующую тему: ‹activity android:name=standard.temp.Hauptmenue_extended android:theme=@style/Theme.Base.AppCompat.Light.DarkActionBar android:label=@string/title_activity_hauptmenue_extended android:screenOrientation=portrait › ‹/activity ›   -  person Maximus1809    schedule 17.09.2013
comment
OnClickListener — это часть старого кода. Но это не решает проблему?   -  person Maximus1809    schedule 17.09.2013
comment
Без понятия...? не могу решить проблему..   -  person Maximus1809    schedule 17.09.2013


Ответы (1)


Некоторые указатели, не могу точно знать, что решит вашу проблему

  • используйте @style/Theme.AppCompat.Light (что такое .Base в вашем примере?)
  • Не называйте свои фрагменты "_activity", это только сбивает с толку.
  • Из-за ошибки в библиотеке поддержки до ICS используется R.id.action_bar_activity_content вместо android.R.id.content . Это будет исправлено в более поздних версиях.
  • используйте ft.replace() в onTabSelected
person xorgate    schedule 29.10.2013
comment
Я полагаю, что больше нет необходимости переключаться между android.R.id.content и R.id.action_bar_activity_content, когда вы ссылаетесь на appcompat-v7 r.19.0.0 или новее. Крис Бейнс исправил проблему, похожую на эту. - person JJD; 12.11.2013