getActionBar () возвращает ноль - PullRequest
171 голосов
/ 29 июля 2011

У меня странная проблема. Я делаю приложение с targetdk 13.

В методе onCreate моей основной деятельности я вызываю getActionBar(), чтобы настроить панель действий. Это прекрасно работает при работе на эмуляторе Android 3.2, но при использовании Android 3.0 и 3.1 метод getActionBar() возвращает ноль.

Я нахожу это чрезвычайно странным, и я не вижу никакой причины, по которой это так. Это ошибка с эмуляторами или мне нужно что-то сделать, чтобы в моем приложении была панель действий?

РЕШЕНИЕ: Я думаю, что нашел решение этой проблемы. Я не использовал setContentView, чтобы установить макет для деятельности. Вместо этого я использовал fragmentTransaction.add(android.R.id.content, mFragment, mTag), чтобы добавить фрагмент к действию. Это работало нормально в 3.2, но в более ранних версиях сота панель действий, очевидно, не установлена, если вы не используете setContentView в методе onCreate(). Поэтому я исправил это с помощью метода setContentView() в моем методе onCreate() и просто снабдил его макетом, который содержал пустой FrameLayout. Я все еще могу использовать метод fragmentTransaction.add(android.R.id.content, mFragment, mTag) так же, как и раньше.

Это не самое красивое исправление, но оно работает.

Ответы [ 24 ]

0 голосов
/ 05 ноября 2015

Просто проверьте реализацию исходного кода командой click:

    private void initWindowDecorActionBar() {
    Window window = getWindow();

    // Initializing the window decor can change window feature flags.
    // Make sure that we have the correct set before performing the test below.
    window.getDecorView();

    if (isChild() || !window.hasFeature(Window.FEATURE_ACTION_BAR) || mActionBar != null) {
        return;
    }

    mActionBar = new WindowDecorActionBar(this);
    mActionBar.setDefaultDisplayHomeAsUpEnabled(mEnableDefaultActionBarUp);

    mWindow.setDefaultIcon(mActivityInfo.getIconResource());
    mWindow.setDefaultLogo(mActivityInfo.getLogoResource());
}

requestWindowFeature (Window.FEATURE_ACTION_BAR); Исправлена ​​моя проблема, поскольку я видел requestWindowFeature (Window.FEATURE_ACTION_BAR) не работает; код с открытым исходным кодом, используйте его!

0 голосов
/ 04 сентября 2018

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

работает довольно быстро

0 голосов
/ 13 июня 2019

В моем случае мне просто нужно было расширить AppCompatActivity вместо Activity

    supportActionBar?.setDisplayHomeAsUpEnabled(true)

Пример класса полной активности:

import android.os.Bundle import androidx.appcompat.app.AppCompatActivity

//class LocationFound : Activity() { <-----Does not seem to work with ActionBar in recent versions
class LocationFound : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_location_found)

        supportActionBar?.setDisplayHomeAsUpEnabled(true)
    } }

в версиях

    minSdkVersion 22
    targetSdkVersion 29
0 голосов
/ 09 июля 2013

Я знаю, что опоздал на вечеринку (и новичок в Android) по этому вопросу, но я нашел здесь очень полезную информацию и подумал, что должен добавить результаты моих собственных усилий, чтобы заставить ActionBar работать так, как я хотел, в случае, если другие как я пришел за помощью.

У меня есть виджет, который является плавающим окном без заголовка окна. Я использую тему стиля для реализации android:windowIsFloating, android:backgroundDimEnabled и android:windowNoTitle. Виджет работал нормально, пока я не хотел добавить кнопку, которая назвала фрагментный пейджер с несколькими страницами фрагмента списка и использовал ActionBar. Это может привести к падению активности пейджера с исключением нулевого указателя. Я сузил его до ActionBar быть нулевым. Следуя выводам предыдущих людей, которые внесли свой вклад в эту тему, я удалил мою тему из файла манифеста, и панель действий работала нормально, но теперь мое окно теперь больше не перемещалось (оно было полноэкранным), и у него был заголовок страницы, который я не хотел.

Дальнейшие исследования привели меня к Руководству по API стилей и тем , которое привело меня к решению. Я обнаружил, что могу добавить свою пользовательскую тему к отдельным действиям в файле манифеста, тогда как раньше я применял ее к приложению. Все мои окна теперь имеют желаемый вид.

...