此解决方案适用于复杂的非 AppCompat 应用程序,这些应用程序在运行 Lollipop 之后使用原生 ToolBar,否则使用原生 ActionBar。
它假定您想要在 Fragments 可见时隐藏 ActionBar。
在您的每个活动中的 onCreate() 中:
getFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener()
{
@Override
public void onBackStackChanged() {
U.ABkk(this, getFragmentManager().getBackStackEntryCount());
}
}
);
或(更好)在实现 Application.ActivityLifecycleCallbacks
的“单例”类中
@Override
public void onActivityCreated(final Activity A, Bundle savedInstanceState) {
A.getFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
@Override
public void onBackStackChanged() {
U.ABkk(A, A.getFragmentManager().getBackStackEntryCount());
}
});
}
在实用程序类内部:
/** Show/hide ActionBar for KitKat devices */
public static void ABkk(Activity A, int count) {
if (lollipop()) return; // No problem when using Toolbar
ActionBar ab = A.getActionBar();
if (ab==null) return;
if (count==1) { ab.hide(); }
if (count==0) { ab.show(); }
}
/** Return true if API 21 or greater */
private static boolean lollipop() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP;
}
使用 onActivityCreated() 是一种不需要对您的片段或活动进行更改的解决方案!