Назначение фрагментов вкладкам в ActionBar с разной ориентацией

У меня есть 3 фрагмента и действие. Я хочу включить вкладки на ActionBar и назначить фрагмент каждой из трех вкладок. Как мне это правильно подключить?

ОРИГИНАЛЬНАЯ ЗАПИСЬ

У меня есть приложение, которое я разрабатываю, используя приложение Google I / O в качестве руководства. Я реализовал вкладки в ActionBar . Вроде работают, пока ориентация планшета не поменяется. Например, все 3 вкладки имеют Фрагмент . Я могу легко переключаться между ними, но когда я меняю ориентацию, независимо от того, Фрагмент , который я просматривал последний раз, остается видимым, но нажатие на вкладки больше не меняет вид ... как будто они отключились. Как и ожидалось, возврат к исходной ориентации не «исправляет» это.

Я изучал возможность сохранения и восстановления состояния, но не вижу, как это поможет.

EDIT

уровень модуля:

Fragment mFragmentA = (Fragment) new AFragmentTab();
Fragment mFragmentB = (Fragment) new BFragmentTab();
Fragment mFragmentC = (Fragment) new CFragmentTab();

У меня есть что-то вроде этого в onCreate :

ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
actionBar.setDisplayShowTitleEnabled(false);

ActionBar.Tab tabA = actionBar.newTab().setText("text a");
ActionBar.Tab tabB = actionBar.newTab().setText("text b");
ActionBar.Tab tabC = actionBar.newTab().setText("text c");

tabA.setTabListener(this);
tabB.setTabListener(this);
tabC.setTabListener(this);

actionBar.addTab(tabA);
actionBar.addTab(tabB);
actionBar.addTab(tabC);

и TabListener , например:

EDIT ] это удалено

class MyTabListener implements ActionBar.TabListener {
    private Fragment mFragment;

    // Called to create an instance of the listener when adding a new tab
    public MyTabListener(Fragment fragment) {
        mFragment = fragment;
    }

    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        ft.add(R.id.fragment_content, mFragment, null);
    }

    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
        ft.remove(mFragment);
    }

    public void onTabReselected(Tab tab, FragmentTransaction ft) {
        // do nothing
    }
}

РЕДАКТИРОВАТЬ

Я переместил TabListener . Вместо того, чтобы быть отдельным классом, я реализую TabListener в Activity .Затем в методах Selected и Unselected у меня есть что-то вроде:

public void onTabSelected(Tab tab, FragmentTransaction ft) {
    switch (tab.getPosition()) {
    case 0:
        ft.add(R.id.fragment_content, mFragmentA, null);
        break;
    case 1:
        ft.add(R.id.fragment_content, mFragmentB, null);
        break;
    case 2:
        ft.add(R.id.fragment_content, mFragmentC, null);
        break;
    }
}

public void onTabUnselected(Tab tab, FragmentTransaction ft) {
    switch (tab.getPosition()) {
    case 0:
        ft.remove(mFragmentA);
        break;
    case 1:
        ft.remove(mFragmentB);
        break;
    case 2:
        ft.remove(mFragmentC);
        break;
    }
}

Он все еще делает то же самое. Я действительно не знаю, что происходит.

25
задан LisaMM 16 March 2015 в 16:56
поделиться