ActionBar (поддержка) с фрагментом (поддержка)

Мне нужно использовать комбинацию панели действий и фрагментов в одном из моих приложений для Android, которые также нацелены на Gingerbread. Поэтому я использовал панель действий из библиотеки поддержки v7 и фрагменты из библиотеки поддержки v4 и расширил свой класс с помощью FragmentActivity.

Я получаю сообщение об ошибке при вводе строки

actionbar = getSupportActionBar();

Ошибка указывает, что getSupportActionBar() - undefined для типа myFragmentClass (мое имя класса). Код работает отлично без поддержки библиотеки. Есть ли решение моей проблемы?

Спасибо!

Ответы

Ответ 1

Вы должны расширить ActionBarActivity вместо FragmentActivity, чтобы иметь Actionbar с фрагментами.

Если вы используете библиотеку appcompat v7, ваша активность должна расширять ActionBarActivity, что является подклассом FragmentActivity (для получения дополнительной информации см. "Добавление панели действий" ).

Дополнительную информацию вы можете найти на странице, приведенной ниже. Вышеприведенная строка взята со страницы ниже (Последний параграф). http://developer.android.com/training/basics/fragments/creating.html

Изменить - это не ошибка. Его просто недостаток знаний. Иногда основные неясны. В настоящее время я изучаю, что тоже с сайта android, и что я должен дать вам ответ.

Ответ 2

напишите этот код в методе OnAttach():

actionBar = ((ActionBarActivity) getActivity()).getSupportActionBar();

ActionBarActivity устарела. Используйте

actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar();

Ответ 3

Я также попытался использовать:

actionbar = getActivity().getSupportActionBar();

и это не сработало, пока я не сделал это:

ActionBar actionBar = ((ActionBarActivity)getActivity()).getSupportActionBar();

Итак, это сработало, когда я применил мою MainActivity.

Ответ 4

для android.support.v7

ActionBar actionBar =  ((AppCompatActivity) getActivity()).getSupportActionBar();

//than next for example 
actionBar.setDisplayHomeAsUpEnabled(true);

Ответ 5

Чтобы вызвать ActionBar внутри фрагмента, используйте это:

actionbar = getActivity().getSupportActionBar();

Фрагмент не имеет ActionBar, а Activity. Вот почему вы должны называть это таким образом.

Ответ 6

Я попробовал это, расширив ActionBarActivity и внеся некоторые изменения в AndroidManifest.xml а

 <activity android:name="yourActionbarActivity" 

Android: тема = "@стиль/Theme.AppCompat.Light" >

и он отлично работает для меня

Ответ 7

Не нужно ничего менять, просто используйте getActionBar().setTitle(title) вместо getSupportActionBar, когда вы используете FragmentActivity. Он отлично работает для меня.