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

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

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

4b9b3361

Ответ 1

Кажется, вам нужно запросить наличие 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 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();
}

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

Ответ 2

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

Убедитесь, что ваша активность расширяет Activity (НЕ 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" >

-Марк

Ответ 3

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

Ответ 4

В панели действий требуется тема или активность с названием приложения, которое должно быть там. Убедитесь, что вы не указали свое приложение или активность как 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" > 

Ответ 5

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

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

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

Ответ 6

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

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

Ответ 7

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

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

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

Ответ 8

Реальный ответ должен быть комбинацией как @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" > 

За активность:

@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 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();
}

Ответ 9

Удостоверьтесь, что вы расширяете АКТИВНОСТЬ, а не ДЕЯТЕЛЬНОСТЬ Это должно решить вашу проблему.

Ответ 10

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

2) Добавлен файл фрагмента Android: тема = "@андроид: стиль /Theme.WithActionBar"

Ответ 11

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

@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();
}

Ответ 12

Если вы разрабатываете приложение с таргетингом на 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);




}

Ответ 13

возможно, ваш стиль активности основан на NoActionBar