Подтвердить что ты не робот

Как скрыть панель действий для фрагмента?

Как я могу скрыть панель действий для определенного фрагмента? Я искал ответ в stackoverflow, но я нашел решение, которое включает в себя отключить панель действий для основной активности в манифесте android. Поскольку мне нужно отключить панель действий для одного фрагмента, это не вариант. Есть идеи? Спасибо.

EDIT: минимальный уровень API равен 7, sherlock не используется

4b9b3361

Ответ 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();
}