扩展AppCompatActivity时,片段后端堆栈不起作用

时间:2015-04-22 03:35:28

标签: android android-fragments android-appcompat

我正在使用AppCompatActivity库版本22.1中引入的新AppCompat

当我扩展此活动时,硬件后退按钮不再弹出我的碎片的后堆栈,而是关闭活动。

以下是我在活动中更改片段的方式:

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>

3 个答案:

答案 0 :(得分:10)

我可以通过在我的活动中覆盖onBackPressed()来解决此问题:

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

如果有人了解为什么在使用AppCompatActivity时需要采取额外步骤,我很有兴趣知道。

答案 1 :(得分:8)

使用     getSupportFragmentManager() 代替     getFragmentManager()

答案 2 :(得分:-3)

您是否正在从Theme.AppCompat.*扩展您的应用主题?