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

前端之家收集整理的这篇文章主要介绍了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相关文章