扩展 AppCompatActivity 时片段返回堆栈不起作用
Fragment back stack does not work when extending AppCompatActivity
我正在使用 AppCompat
库版本 22.1 中引入的新 AppCompatActivity
。
当我扩展这个 Activity 时,硬件后退按钮不再弹出我的片段的后退堆栈,而是关闭 Activity。
以下是我如何更改 activity 中的片段:
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>
使用
getSupportFragmentManager()
代替
getFragmentManager()
您是否要从 Theme.AppCompat.*
扩展您的应用主题?
我可以通过覆盖 Activity 中的 onBackPressed()
来解决这个问题:
@Override
public void onBackPressed() {
if (getFragmentManager().getBackStackEntryCount() > 0) {
getFragmentManager().popBackStack();
} else {
super.onBackPressed();
}
}
如果有人知道为什么在使用 AppCompatActivity
时需要这个额外的步骤,我很想知道。
我正在使用 AppCompat
库版本 22.1 中引入的新 AppCompatActivity
。
当我扩展这个 Activity 时,硬件后退按钮不再弹出我的片段的后退堆栈,而是关闭 Activity。
以下是我如何更改 activity 中的片段:
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>
使用
getSupportFragmentManager()
代替
getFragmentManager()
您是否要从 Theme.AppCompat.*
扩展您的应用主题?
我可以通过覆盖 Activity 中的 onBackPressed()
来解决这个问题:
@Override
public void onBackPressed() {
if (getFragmentManager().getBackStackEntryCount() > 0) {
getFragmentManager().popBackStack();
} else {
super.onBackPressed();
}
}
如果有人知道为什么在使用 AppCompatActivity
时需要这个额外的步骤,我很想知道。