getActionBar не работает с библиотекой AppCompat

Я пытаюсь создать приложение TabLayout для Android, используя Intellij Idea и AppCompat v7 library.

import android.support.v7.app.ActionBar;

public class MainActivity extends FragmentActivity implements TabListener { 
...
private ActionBar actionBar;
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
actionBar = getActionBar(); //Error line
...

}

При использовании getActionBar() я получаю эту ошибку:

Несовместимые типы:

Требуется: android.support.v7.app.ActionBar

Найдено: android.app.ActionBar

У меня нет import android.app.ActionBar; в моей деятельности. Я попытался:

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

и

actionBar = getSupportActionBar();

Но я получаю

Не удается разрешить метод getActionBar() //Или getSupportActionBar()

Как я могу использовать getActionBar() с помощью библиотеки appCompat? (Или, может быть, есть альтернатива, о которой я не знаю?)

Изменить

Я также заменил FragmentActivity на ActionBarActivity в этой строке:

 public class MainActivity extends FragmentActivity //ActionBarActivity

Но не повезло


person Alex Jolig    schedule 28.01.2016    source источник
comment
Попробуйте это, можете ли вы изменить FragmentActivity на AppCompatActivity и использовать getSupportActionBar()?   -  person Raghavendra    schedule 28.01.2016
comment
Вам нужно extends AppCompatActivity, а затем использовать getSupportActionBar().   -  person Mike M.    schedule 28.01.2016
comment
@Alex Jolig используйте ответ IntelliJ Amiya, он сработает   -  person Raghavendra    schedule 28.01.2016


Ответы (3)


Неправильный подход

Звоню старшему import android.support.v7.app.ActionBar;

Если вы расширяете AppCompatActivity/FragmentActivity, вы предоставляете обратную поддержку для более старых версий Android, и для этого вам нужно использовать getSupportActionBar().

Прочитайте getSupportActionBar с помощью FragmentActivity

public class MainActivity extends AppCompatActivity {
  // ...

  ....

 ActionBar actionBar =getSupportActionBar();
}

Добавить это .

dependencies {
   // … 
   compile 'com.android.support:appcompat-v7:23.1.0'
}

Проверьте Activity, AppCompatActivity, FragmentActivity и ActionBarActivity: когда использовать Какой?

AppCompatActivity — из библиотеки appcompat-v7. В основном, это предлагает бэкпорт панели действий. Поскольку собственная панель действий была добавлена ​​в API уровня 11, для этого вам не нужна AppCompatActivity.

Для вашей информации Как добавить библиотеку (android-support-v7-appcompat) в IntelliJ IDEA

person IntelliJ Amiya    schedule 28.01.2016
comment
@AlexJolig Хорошо, ты скомпилировал compile 'com.android.support:appcompat-v7: - person IntelliJ Amiya; 28.01.2016
comment
@AlexJolig stackoverflow.com/questions/18025942/ - person IntelliJ Amiya; 28.01.2016
comment
Да, я добавил библиотеку в проект. поэтому я не получаю никаких других ошибок при использовании библиотеки - person Alex Jolig; 28.01.2016
comment
@AlexJolig У вас есть AppCompatActivity, импортированный в MainActivity? - person Mike M.; 28.01.2016
comment
@МайкМ. Это было то, что я пропустил, делая это решение. Спасибо - person Alex Jolig; 28.01.2016
comment
@AlexJolig Нет проблем. Двигайтесь вперед. - person IntelliJ Amiya; 28.01.2016

Прежде всего, вы должны расширить AppCompatActivity вместо FragmentActivity.

Затем вы можете использовать getSupportActionBar().

Для этого просто импортируйте нужную зависимость:

compile 'com.android.support:appcompat-v7:23.1.1'

Но очень важно убедиться, что TabListener это неправильный способ получения макета вкладок. Этот интерфейс устарел на уровне API 21.

С новой библиотекой поддержки дизайна теперь вы можете использовать новый Вкладка.

Просто добавьте эту зависимость в свой build.gradle

compile 'com.android.support:design:23.1.1'

Код очень прост:

TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(viewPager);

Чтобы реализовать многие функции материального дизайна, вы должны использовать его в CoordinatorLayout и AppBarLayout.

Что-то вроде этого:

 <android.support.design.widget.CoordinatorLayout
         xmlns:android="http://schemas.android.com/apk/res/android"
         xmlns:app="http://schemas.android.com/apk/res-auto"
         android:layout_width="match_parent"
         android:layout_height="match_parent">


     <android.support.design.widget.AppBarLayout
             android:layout_height="wrap_content"
             android:layout_width="match_parent">

         <android.support.v7.widget.Toolbar
                 ...
                 app:layout_scrollFlags="scroll|enterAlways"/>

         <android.support.design.widget.TabLayout
                 ...
                 app:layout_scrollFlags="scroll|enterAlways"/>

     </android.support.design.widget.AppBarLayout>

     <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />

 </android.support.design.widget.CoordinatorLayout>
person Gabriele Mariotti    schedule 28.01.2016
comment
Что делать, если у меня нет build.gradle. Я использую Intellij Idea и не использовал Gradle. Как мне теперь скомпилировать? - person Alex Jolig; 28.01.2016
comment
Проверьте эти ссылки: jetbrains.com/idea/help/working- with-gradle-projects.html или jetbrains. com/idea/help/creating-a-gradle-project.html или jetbrains.com/idea/help/gradle-2.html иначе придется извлекать классы и ресурсы из аара, но это не так просто - person Gabriele Mariotti; 28.01.2016

Измените свой импорт

import android.support.v7.app.ActionBar;

вместо

import android.app.ActionBar;

и использовать

public class MainActivity extends AppCompatActivity {
   // ...
}
person Pitty    schedule 28.01.2016
comment
Сделал это. Все еще не могу использовать AppCompatActivity - person Alex Jolig; 28.01.2016
comment
скомпилируйте 'com.android.support:appcompat-v7:23.1.1', добавьте это в свою сборку gradle - person Pitty; 28.01.2016