Фрагмент назад стек не работает при расширении 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>
Ответы
Ответ 1
Я смог разрешить это, переопределив onBackPressed()
в моей работе:
@Override
public void onBackPressed() {
if (getFragmentManager().getBackStackEntryCount() > 0) {
getFragmentManager().popBackStack();
} else {
super.onBackPressed();
}
}
Если кто-нибудь знает, почему этот дополнительный шаг необходим при использовании AppCompatActivity
, мне было бы интересно узнать.
Ответ 2
использование getSupportFragmentManager()
вместо getFragmentManager()
Ответ 3
Расширяете ли вы тему приложения от Theme.AppCompat.*
?