Как скрыть панель действий для фрагмента?
Как я могу скрыть панель действий для определенного фрагмента?
Я искал ответ в stackoverflow, но я нашел решение, которое включает в себя отключить панель действий для основной активности в манифесте android. Поскольку мне нужно отключить панель действий для одного фрагмента, это не вариант.
Есть идеи? Спасибо.
EDIT: минимальный уровень API равен 7, sherlock не используется
Ответы
Ответ 1
Если вы используете AppCompatActivity (вы должны), то это решение, которое сработало для меня:
((AppCompatActivity) getActivity()).getSupportActionBar().hide();
Вы можете добавить это в onCreate(). Фрагмент поддержки getActivity() возвращает FragmentActivity, и это не содержит метод getSupportActionBar(). Использование только getActionBar() дает исключение null-pointer, если у вас есть AppCompatActivity.
Ответ 2
getActionBar().hide()
или getSupportActionBar().hide()
(если используется ActionBarCompat v7 lib).
Отношения
Ответ 3
Поместите getSupportActionBar().hide()
до setContentView
в Activity, которая содержит фрагменты.
Также добавьте это: ((AppCompatActivity) getActivity()).getSupportActionBar().hide()
в фрагменты перед раздуванием макета. Это работает, если вы используете этот ActionBarActivity
. Он также удаляет мои лаги в скрытой панели действий
Ответ 4
Скрыть actionBar, используя это в нужном фрагменте.
getActivity().getSupportActionBar().hide();
И покажите actionBar с этим в следующем фрагменте.
getActivity().getActionBar().show();
Ответ 5
Вы можете просто поместить это в свой метод createView класса Fragment: -
View layout = inflater.inflate(R.layout.player_fragment, container, false);
((AppCompatActivity) getActivity()).getSupportActionBar().hide();
Ответ 6
Вы пробовали getActivity().getSupportActionBar().hide()
в onCreate()
фрагмента, в который вы хотите спрятать ActionBar?
Я предполагаю, что вы не используете ActionBarSherlock
.
Ответ 7
Это решение предназначено для сложных приложений, не относящихся к AppCompat, которые используют собственный ToolBar при запуске Lollipop и далее, а в противном случае - собственный ActionBar.
Предполагается, что вы хотите скрыть панель действий, когда фрагменты видны.
Внутри onCreate() в каждом из ваших действий:
getFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener()
{
@Override
public void onBackStackChanged() {
U.ABkk(this, getFragmentManager().getBackStackEntryCount());
}
}
);
ИЛИ (намного лучше) внутри класса 'singleton', который реализует 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() - это решение, которое не требует никаких изменений ваших фрагментов или действий!
Ответ 8
Поместите этот код в фрагмент, в котором вы хотите скрыть панель инструментов...
@Override
public void onResume() {
super.onResume();
((AppCompatActivity)getActivity()).getSupportActionBar().hide();
}
@Override
public void onStop() {
super.onStop();
((AppCompatActivity)getActivity()).getSupportActionBar().show();
}