getSupportActionBar()对于TaskActivity类型,未定义方法getSupportActionBar().为什么?

Евг*_*нов 23 android android-actionbar-compat

我被建议从ActionBarActivity扩展我的Activity类

这是以前的代码:

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);         
}
Run Code Online (Sandbox Code Playgroud)

我写了新的申请并遵循了建议.

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;
          }            
        }
Run Code Online (Sandbox Code Playgroud)

如果我使用ACtionBarActivity而不是Activity,当我尝试运行它时,手机上会出现以下错误:

对于TaskActivity类型,未定义getSupportActionBar()方法

MH.*_*MH. 75

您的类需要从而ActionBarActivity不是简单地扩展Activity才能使用这些getSupport*()方法.

更新 [2015/04/23]:随着Android支持库22.1的发布,您现在应该扩展AppCompatActivity.此外,您不再需要扩展,ActionBarActivity或者AppCompatActivity,因为您现在可以AppCompatDelegate在任何活动中合并实例.

  • AppCompatActivity带来了全新的问题. (3认同)
  • 今天帮了我:) (2认同)
  • @jj_:嗯,因为`getSupport*()`方法根本不存在于`Activity`中,而是存在于`FragmentActivity`中,它是前者的扩展和`ActionBarActivity`的祖先.如果这没有意义,只需查看每个类的JavaDoc和方法. (2认同)

小智 5

这是您可以使用的另一种解决方案.它正在我的应用程序中工作.

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

然后,您可以删除ActionBar使用的一行导入.


Евг*_*нов 2

这是我的问题的答案。我又问了一遍,并发表了一些评论。 如何添加支持库?

  • 这是否会使这个问题重复? (6认同)