【问题标题】:getActionBar doesn't work using AppCompat libgetActionBar 无法使用 AppCompat 库
【发布时间】:2016-05-05 09:36:41
【问题描述】:

我正在尝试使用 Intellij IdeaAppCompat v7 library 创建一个 TabLayout android 应用。

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()

如何通过 appCompat 库使用getActionBar()(或者也许有一个我不知道的替代方案?)

编辑

我还在这一行中将FragmentActivity 替换为ActionBarActivity

 public class MainActivity extends FragmentActivity //ActionBarActivity

但运气不好

【问题讨论】:

  • 试试这个,你能把 FragmentActivity 改成 AppCompatActivity 并使用 getSupportActionBar() 吗?
  • 你需要extends AppCompatActivity,然后使用getSupportActionBar()
  • @Alex Jolig 使用 IntelliJ Amiya 的答案它会起作用

标签: android intellij-idea material-design android-appcompat android-actionbar-compat


【解决方案1】:

不好的方法

打电话给老import android.support.v7.app.ActionBar;

如果您正在扩展 AppCompatActivity/FragmentActivity,那么您正在为较旧的 Android 版本提供向后支持,为此您必须使用 getSupportActionBar()

阅读getSupportActionBar using FragmentActivity

public class MainActivity extends AppCompatActivity {
  // ...

  ....

 ActionBar actionBar =getSupportActionBar();
}

添加这个。

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

检查Activity, AppCompatActivity, FragmentActivity, and ActionBarActivity: When to Use Which?

AppCompatActivity 来自 appcompat-v7 库。主要是这个 提供操作栏的反向移植。由于原生操作栏是 在 API 级别 11 中添加,您不需要 AppCompatActivity。

为了您的Information How do I add a library (android-support-v7-appcompat) in IntelliJ IDEA

【讨论】:

  • @AlexJolig 好的,你编译了吗compile 'com.android.support:appcompat-v7:
  • 是的,我已将库添加到项目中。这就是为什么我在使用库时没有收到任何其他错误
  • @AlexJolig 你在MainActivity 中导入了AppCompatActivity 吗?
  • @MikeM。这就是我错过这个解决方案的原因。谢谢
  • @AlexJolig 没问题。继续前进。
【解决方案2】:

首先,您必须扩展 AppCompatActivity 而不是 FragmentActivity

那么你可以使用getSupportActionBar()

为此,只需导入正确的依赖项:

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

但是检查TabListener 是获取标签布局的错误方法非常重要。 此接口在 API 级别 21 中已弃用。

有了新的设计支持库,您现在可以使用新的TabLayout

只需将此依赖项添加到您的build.gradle

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

代码很简单:

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

要实现材料设计的许多功能,您应该在 CoordinatorLayoutAppBarLayout

类似这样的:

 <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>

【讨论】:

【解决方案3】:

更改您的导入

import android.support.v7.app.ActionBar;

插入

import android.app.ActionBar;

并使用

public class MainActivity extends AppCompatActivity {
   // ...
}

【讨论】:

  • 做到了。还是不能用AppCompatActivity
  • compile 'com.android.support:appcompat-v7:23.1.1' 在你的构建 gradle 中添加这个
猜你喜欢
  • 1970-01-01
  • 2023-03-06
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-08
  • 1970-01-01
相关资源
最近更新 更多