Итак, я работаю над проектом, который хочу запустить на устаревших устройствах 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();
}
}