android – Fragment back stack在AppCompatActivity扩展时不起作用

我正在使用AppCompat Library 22.1版中引入的新AppCompatActivity.

当我扩展此Activity时,硬件返回按钮不再弹出我的Fragments的堆栈,它会关闭Activity.

这是我如何在我的活动中改变片段:

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

如果我更改MainActivity将AppCompatActivity扩展为MainActivity extends Activity,问题就会消失,我可以通过我的碎片返回.

将getFragmentManager()调用为getSupportFragmentManager()会导致运行Android& 5.0失去材料主题,这是实现AppCompatActivity的主要原因.

在我的清单<应用程序中引用的样式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>

解决方法

我能够通过在我的Activity中覆盖onBackpressed()来解决这个问题:
@Override
public void onBackpressed() {
    if (getFragmentManager().getBackStackEntryCount() > 0) {
        getFragmentManager().popBackStack();
    } else {
        super.onBackpressed();
    }
}

如果任何人有任何洞察,为什么在使用AppCompatActivity时需要额外的步骤,我有兴趣知道.

相关文章

这篇“android轻量级无侵入式管理数据库自动升级组件怎么实现...
今天小编给大家分享一下Android实现自定义圆形进度条的常用方...
这篇文章主要讲解了“Android如何解决字符对齐问题”,文中的...
这篇文章主要介绍“Android岛屿数量算法怎么使用”的相关知识...
本篇内容主要讲解“Android如何开发MQTT协议的模型及通信”,...
本文小编为大家详细介绍“Android数据压缩的方法是什么”,内...