getSupportActionBar() Метод getSupportActionBar() не определен для типа TaskActivity. Почему?

Мне порекомендовали расширить класс Activity из ActionBarActivity.

Вот предыдущий код:

import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;  

public class MainActivity extends Activity  {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);         
}

Я написал новое приложение и последовал совету.

import android.os.Bundle;
    import android.support.v7.app.ActionBar;
    import android.support.v7.app.ActionBarActivity;            

    public class MainActivity extends ActionBarActivity {

          @Override
          public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            ActionBar actionBar =getSupportActionBar();
            actionBar.setDisplayHomeAsUpEnabled(true);            
            setContentView(R.layout.activity_main);
          }

          @Override
          public boolean onCreateOptionsMenu(Menu menu) {
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
          }            
        }

Если я использую ACtionBarActivity вместо Activity, я получаю следующую ошибку на телефоне, когда пытаюсь запустить его:

Метод getSupportActionBar() не определен для типа TaskActivity.


person Евгений Смирнов    schedule 27.07.2013    source источник


Ответы (7)


Ваш класс должен расширяться от ActionBarActivity, а не от простого Activity, чтобы используйте методы getSupport*().

Обновление [23/04/2015]: с выпуск библиотеки поддержки Android 22.1, теперь вам следует расширить AppCompatActivity. Кроме того, вам больше не нужно обязать расширять ActionBarActivity или AppCompatActivity, так как теперь вы можете включить AppCompatDelegate в любом действии.

person MH.    schedule 27.07.2013
comment
@jj_: Ну, потому что методы getSupport*() просто не существуют в Activity, а живут в FragmentActivity, который является расширением первого и предком ActionBarActivity. Если это не имеет смысла, просто просмотрите JavaDoc и методы каждого класса. - person MH.; 28.01.2015
comment
AppCompatActivity приносит целый ряд новых проблем. - person Oliver Dixon; 25.08.2015

Вот еще одно решение, которое вы могли бы использовать. Он работает в моем приложении.

      @Override
      public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        android.support.v7.app.ActionBar actionBar =getSupportActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);            
        setContentView(R.layout.activity_main)

Затем вы можете избавиться от этого импорта для использования одной строки ActionBar.

person dongemus    schedule 14.05.2014
comment
Большое спасибо, но я уже решил свою проблему. Я читал о добавлении библиотек поддержки. - person Евгений Смирнов; 19.05.2014
comment
Почему 5 плюсов за это? Это не решение для Activity без метода getSupportActionBar(), это просто комментарий о стиле кода... - person psyklopz; 06.04.2018

Если вы уже расширяетесь от ActionBarActivity и пытаетесь получить панель действий из фрагмента:

ActionBar mActionBar = (ActionBarActivity)getActivity()).getSupportActionBar();
person Heraldo    schedule 13.02.2015

Вот ответ на мой вопрос. Я спросил это снова с некоторыми замечаниями. Как добавить библиотеки поддержки?

person Евгений Смирнов    schedule 01.08.2013
comment
Делает ли это этот вопрос дубликатом? - person Jon Surrell; 13.02.2015

Если вы расширяетесь от AppCompatActivity и пытаетесь получить ActionBar из фрагмента, вы можете сделать это:

ActionBar mActionBar = ((AppCompatActivity) getActivity()).getSupportActionBar();
person Horatio    schedule 12.08.2015

Вы должны изменить активность расширения на расширение AppCompactActivity, затем попробуйте установить и получитьSupportActionBar()

person Tony Jacob    schedule 22.02.2018

Можете ли вы установить ActionBar перед установкой Contient View? Такой порядок был бы лучше:

 @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ActionBar actionBar =getSupportActionBar();
    actionBar.setDisplayHomeAsUpEnabled(true);            
  }
person Chad Hamilton Frederick    schedule 31.07.2019