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

how*_*ttl 10 android android-appcompat android-fragments

我正在使用库22.1版中AppCompatActivity引入的新功能AppCompat.

当我扩展此Activity时,硬件后退按钮不再弹出我的Fragments的后堆栈,而是关闭Activity.

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

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

如果我改变MainActivity extends AppCompatActivityMainActivity extends Activity问题是否会消失,我能够通过我的片段倒退.

更改呼叫getFragmentManager()getSupportFragmentManager()运行Android <5.0不失材料的主题,这是贯彻的主要原因在设备的结果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>
Run Code Online (Sandbox Code Playgroud)

how*_*ttl 10

我可以通过覆盖onBackPressed()我的Activity 来解决这个问题:

@Override
public void onBackPressed() {
    if (getFragmentManager().getBackStackEntryCount() > 0) {
        getFragmentManager().popBackStack();
    } else {
        super.onBackPressed();
    }
}
Run Code Online (Sandbox Code Playgroud)

如果有人对使用这个额外步骤的原因有任何了解AppCompatActivity我会有兴趣知道.


小智 8

getSupportFragmentManager() 而不是 getFragmentManager()