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

时间:2013-07-27 00:49:34

标签: 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);         
}

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

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,当我尝试运行它时,手机上会出现以下错误:

  

对于TaskActivity类型

,未定义getSupportActionBar()方法

7 个答案:

答案 0 :(得分:74)

您的课程需要从ActionBarActivity延伸,而不是普通的Activity,以便使用getSupport*()方法。

更新 [2015/04/23]:使用the release of Android Support Library 22.1,您现在应该展开AppCompatActivity.此外,您不再 进行扩展ActionBarActivityAppCompatActivity,因为您现在可以在任何活动中加入AppCompatDelegate个实例。

答案 1 :(得分: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)

然后你可以摆脱ActionBar使用的那一行的导入。

答案 2 :(得分:3)

如果您已经从ActionBarActivity扩展,并且您正试图从片段中获取操作栏:

ActionBar mActionBar = (ActionBarActivity)getActivity()).getSupportActionBar();

答案 3 :(得分:2)

以下是我的问题的答案。 我再次提出一些评论。 How to add support libraries?

答案 4 :(得分:2)

如果您从AppCompatActivity扩展并尝试从Fragment获取ActionBar,则可以执行以下操作:

ActionBar mActionBar = ((AppCompatActivity) getActivity()).getSupportActionBar();

答案 5 :(得分:1)

您必须将extends活动更改为扩展 AppCompactActivity然后尝试set和getSupportActionBar()

答案 6 :(得分:0)

可以在设置内容视图之前设置ActionBar吗?此顺序会更好:

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

    ActionBar actionBar =getSupportActionBar();
    actionBar.setDisplayHomeAsUpEnabled(true);            
  }