Проблемы с получением FragmentTransaction из действия при использовании совместимости - PullRequest
3 голосов
/ 11 февраля 2012

Итак, я работаю над проектом, который хочу запустить на устаревших устройствах Android, поэтому я использую библиотеку совместимости.Я использую интерфейс, похожий на NewsReader, только вместо двух фрагментов, находящихся в Activity, они встроены в другой Fragment, который встроен в ViewPagger.

Для простоты мы будем использовать эти термины ...

Activity -> ViewPager -> ContainerFragment->Fragment1
                                          ->Fragment2

В ContainerFragment я пытаюсь заменить фрагмент 1 фрагментом 2, если это телефон, поэтому я попробовал следующий код вContainerFragment ...

import android.support.v4.app.FragmentTransaction;    
...
public void onBarSelected(Integer index) {
    selectedBarIndex = index;
    if (isDualPane) {
        // display it on the article fragment
        mBarEditFragment.displayBar(index);
    }
    else {
        // use separate activity
        FragmentActivity activity = (FragmentActivity)getActivity();
        FragmentTransaction ft = activity.getFragmentManager().beginTransaction();
        ft.replace(R.id.bar_container, new BarEditFragment(),R.id.bar_edit);
    }

}

Но я получаю следующую ошибку компиляции

Type mismatch: cannot convert from android.app.FragmentTransaction 
 to android.support.v4.app.FragmentTransaction

Я дважды проверил, и действие действительно расширяет совместимость FragmentActivity.

UPDATE

Пытался изменить на ...

и получил ....

MainActivity activity = (MainActivity)getActivity();
Object test = activity.getFragmentManager().beginTransaction();
FragmentTransaction ft = (FragmentTransaction)test;
ft.replace(R.id.bar_container, new BarEditFragment());

И я получил ...

java.lang.ClassCastException: android.app.BackStackRecord cannot be cast to android.support.v4.app.FragmentTransaction

Есть идеи?

ОТВЕТ:

Я понял мою проблему. Проблема в том, что вы не должны получать Менеджер фрагментов из Действия и должны получать его из фрагмента.

Это работает....

public void onBarSelected(Integer index) {
    selectedBarIndex = index;
    if (isDualPane) {
        // display it on the article fragment
        //mBarEditFragment.displayBar(index);
    }
    else {
        FragmentTransaction ft = getFragmentManager().beginTransaction();
        ft.replace(R.id.bar_container, new BarEditFragment());
        ft.commit();
    }

}

1 Ответ

12 голосов
/ 20 ноября 2012

Столкновение с той же проблемой решено с помощью

getSupportFragmentManager ()

Спасибо

...