我正在使用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>
答案 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.*
扩展您的应用主题?