24

建议我从 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() 未定义

4

7 回答 7

77

您的类需要扩展 from ActionBarActivity,而不是普通Activity的才能使用这些getSupport*()方法。

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

于 2013-07-27T01:07:16.653 回答
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 使用。

于 2014-05-14T20:25:25.203 回答
3

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

ActionBar mActionBar = (ActionBarActivity)getActivity()).getSupportActionBar();
于 2015-02-13T16:12:00.047 回答
2

这是我的问题的答案。我已经用一些评论再次问了这个问题。 如何添加支持库?

于 2013-08-01T12:24:18.363 回答
2

如果您从 AppCompatActivity 扩展并尝试从 Fragment 获取 ActionBar,您可以这样做:

ActionBar mActionBar = ((AppCompatActivity) getActivity()).getSupportActionBar();
于 2015-08-12T23:17:08.983 回答
1

您必须将 extends Activity 更改为 extends AppCompactActivity 然后尝试设置和 getSupportActionBar()

于 2018-02-22T04:26:14.527 回答
0

可以在设置大陆视图之前设置 ActionBar 吗?这个顺序会更好:

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

    ActionBar actionBar =getSupportActionBar();
    actionBar.setDisplayHomeAsUpEnabled(true);            
  }
于 2019-07-31T03:46:53.257 回答