GetActionBar возвращает null

Вызов getActionBar возвращает null . Это часто сообщалось, поэтому я включил в себя решения, которые другие использовали: My minSdkVersion=11 , у меня есть заголовок, и я getActionBar после setContentView . Кроме того, моя деятельность не является дочерней деятельностью.

 setContentView(R.layout.main); // experiment with the ActionBar ActionBar actionBar = getActionBar(); actionBar.hide(); 

Устройство – Samsung Galaxy Tab 10.1 под управлением Android 3.2

Заранее благодарим за любые идеи или предложения!

Кажется, вам нужно запросить наличие Actionbar (! = Titlebar) либо через тему или через код ниже.

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // The Action Bar is a window feature. The feature must be requested // before setting a content view. Normally this is set automatically // by your Activity's theme in your manifest. The provided system // theme Theme.WithActionBar enables this for you. Use it as you would // use Theme.NoTitleBar. You can add an Action Bar to your own themes // by adding the element <item name="android:windowActionBar">true</item> // to your style definition. getWindow().requestFeature(Window.FEATURE_ACTION_BAR); setContentView(R.layout.main); // experiment with the ActionBar ActionBar actionBar = getActionBar(); actionBar.hide(); } 

Код от [ здесь ]

Кажется, есть несколько условий, которые необходимо выполнить, чтобы это работало. Тот, который долгое время меня раздражал:

Убедитесь, что ваша активность расширяет Activity (NOT ActionBarActivity).

 public class MagicActivity extends Activity 

Убедитесь, что в манифесте приложения есть что-то вроде

 <application ... android:theme="@android:style/Theme.Holo" > 

И убедитесь, что ваш макет деятельности

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" .... android:theme="@android:style/Theme.WithActionBar" > 

-Отметка

Кажется, я решил все свои ошибки, переключив getActionBar () с помощью getSupportActionBar () . Я пробовал разные темы, добавляя getWindow (). RequestFeature (Window.FEATURE_ACTION_BAR); , Убедитесь, что setContentView (view) был первым и все другие вещи, которые были замечены раньше.

Для панели действий требуется тема или активность с названием приложения. Убедитесь, что вы не указали свое приложение или деятельность как Theme.NOTITLE.

 <application android:name="com.xxx.yyy.Application" android:debuggable="false" android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@style/Theme.NoTitle"> // remove this line if you have this in your code <activity android:name="com.xxx.yyy.Activity" android:configChanges="orientation|keyboardHidden|screenSize" android:theme="@style/Theme.NoTitle" // remove this line if you have this in your code android:windowSoftInputMode="adjustResize|stateHidden" > Размер <application android:name="com.xxx.yyy.Application" android:debuggable="false" android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@style/Theme.NoTitle"> // remove this line if you have this in your code <activity android:name="com.xxx.yyy.Activity" android:configChanges="orientation|keyboardHidden|screenSize" android:theme="@style/Theme.NoTitle" // remove this line if you have this in your code android:windowSoftInputMode="adjustResize|stateHidden" > 

Я пытался получить ActionBar изнутри фрагмента внутри ActionBarActivity, используя библиотеку поддержки. Я должен был сделать это:

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

Мой следующий квест – выяснить, как сделать этот общий. Например, этот код выглядит грязным, потому что он требует, чтобы мой Фрагмент знал, что он используется ActionBarActivity и использует библиотеку поддержки. Я думаю, что это должен быть метод, который проверяет getActivity().getActionBar() сначала следует за кодом выше, захватывая ClassCastException, если родительская активность не является ActionBarActivity.

Это устранило мою проблему:

 android.support.v7.app.ActionBar ab = getSupportActionBar(); 

Если вы создадите проект приложения для API14 или выше, появится папка значений-14. Убедитесь, что папка существует, и она имеет файл styles.xml с:

 <style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar"> <!-- API 14 theme customizations can go here. --> </style> 

Я получил эту ошибку, потому что я создал новый проект, и мне не нужны какие-либо дополнительные папки значений в моем проекте, поэтому я просто сохранил папку значений и удалил папки значений-v11 и values-v14. Но, по-видимому, тема по умолчанию для API14 и выше требует ActionBar в родительском теге XML, если вы хотите использовать ActionBar. Поэтому я предположил, что могу сделать это неправильно! Надеюсь, это помогает кому-то. Скорее всего, вы разрешите свои проблемы с вышеупомянутыми ответами.

Реальный ответ должен быть сочетанием как @zapl, так и @Himanshu Virmani

Для Android Manifest:

 <application android:name="com.xxx.yyy.Application" android:debuggable="false" android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@style/Theme.NoTitle"> // remove this line if you have this in your code <activity android:name="com.xxx.yyy.Activity" android:configChanges="orientation|keyboardHidden|screenSize" android:theme="@style/Theme.NoTitle" // remove this line if you have this in your code android:windowSoftInputMode="adjustResize|stateHidden" > Размер <application android:name="com.xxx.yyy.Application" android:debuggable="false" android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@style/Theme.NoTitle"> // remove this line if you have this in your code <activity android:name="com.xxx.yyy.Activity" android:configChanges="orientation|keyboardHidden|screenSize" android:theme="@style/Theme.NoTitle" // remove this line if you have this in your code android:windowSoftInputMode="adjustResize|stateHidden" > 

Для деятельности:

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // The Action Bar is a window feature. The feature must be requested // before setting a content view. Normally this is set automatically // by your Activity's theme in your manifest. The provided system // theme Theme.WithActionBar enables this for you. Use it as you would // use Theme.NoTitleBar. You can add an Action Bar to your own themes // by adding the element <item name="android:windowActionBar">true</item> // to your style definition. getWindow().requestFeature(Window.FEATURE_ACTION_BAR); setContentView(R.layout.activity_main); // Hide the status bar for Android 4.1 and higher View decorView = getWindow().getDecorView(); // Hide the status bar. int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN; decorView.setSystemUiVisibility(uiOptions); // Remember that you should never show the action bar if the // status bar is hidden, so hide that too if necessary. ActionBar actionBar = getActionBar(); actionBar.hide(); } 

Убедитесь, что вы расширили ACTIONBACACTIVITY, а не ACTIVITY. Это должно решить вашу проблему.

Просто измените две вещи: 1) манифест редактирования файла android: theme = "@ android: style / Theme.Holo">

2) Fragment file add android: theme = "@ android: style / Theme.WithActionBar"

Измените порядок системного запроса:

 @Override protected void onCreate(Bundle savedInstanceState) { getWindow().requestFeature(Window.FEATURE_ACTION_BAR); super.onCreate(savedInstanceState); setContentView(R.layout.main); // experiment with the ActionBar ActionBar actionBar = getActionBar(); actionBar.hide(); } 

В случае, если вы разрабатываете приложение с таргетингом на sdk> = 14, и вы расширяете AppCompat для поддержки темы Material в предыдущих версиях. Если вы хотите скрыть элементы из панели действий, как кнопка «Назад», вам нужно сделать это: в своей деятельности (не в классе фрагмента). Если вы будете использовать getActionBar (), он вернет значение null. Как в теме Appsupport getSupportAcionBar () вернет панель действий.

Вот ссылка, если вы хотите следовать из DevByte

  protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_detail); getSupportActionBar().setDisplayHomeAsUpEnabled(false); }