Подтвердить что ты не робот

Фрагмент назад стек не работает при расширении AppCompatActivity

Я использую новый AppCompatActivity, представленный в библиотеке AppCompat версии 22.1.

Когда я расширяю эту активность, кнопка возврата оборудования больше не выталкивает задний стек моих фрагментов, вместо этого закрывает действие.

Вот как я изменяю фрагменты в своей деятельности:

public void changeFragment(Fragment f) {
    FragmentTransaction ft = getFragmentManager().beginTransaction();
    ft.replace(R.id.fragment_holder, f);
    ft.addToBackStack(null);
    ft.commit();
}

Если я изменяю MainActivity extends AppCompatActivity на MainActivity extends Activity, проблема исчезает, и я могу вернуться назад через свои фрагменты.

Изменение вызовов на getFragmentManager() до getSupportFragmentManager() приводит к появлению устройств под управлением Android < 5.0, потеряв тему Material, что было основной причиной внедрения AppCompatActivity в первую очередь.

Стиль, указанный в моем манифесте <application android:theme="@style/AppTheme">

<style name="AppTheme" parent="Theme.AppCompat.Light">
    <item name="colorPrimary">@color/primary_material_light</item>
    <item name="colorPrimaryDark">@color/primary_dark_material_light</item>
    <item name="colorAccent">@color/accent_material_light</item>
</style>
4b9b3361

Ответ 1

Я смог разрешить это, переопределив onBackPressed() в моей работе:

@Override
public void onBackPressed() {
    if (getFragmentManager().getBackStackEntryCount() > 0) {
        getFragmentManager().popBackStack();
    } else {
        super.onBackPressed();
    }
}

Если кто-нибудь знает, почему этот дополнительный шаг необходим при использовании AppCompatActivity, мне было бы интересно узнать.

Ответ 2

использование   getSupportFragmentManager() вместо   getFragmentManager()

Ответ 3

Расширяете ли вы тему приложения от Theme.AppCompat.*?