我正在使用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时需要额外的步骤,我有兴趣知道.