【问题标题】:getSupportActionBar() The method getSupportActionBar() is undefined for the type TaskActivity. Why?getSupportActionBar() 方法 getSupportActionBar() 未为 TaskActivity 类型定义。为什么?
【发布时间】:2013-07-27 00:49:33
【问题描述】:

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

【问题讨论】:

    标签: android android-actionbar-compat


    【解决方案1】:

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

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

    【讨论】:

    • @jj_: 好吧,因为getSupport*() 方法根本不存在于Activity 中,而是存在于FragmentActivity 中,它是前者的扩展和@987654334 的祖先@。如果这没有意义,只需查找每个类的 JavaDoc 和方法。
    • AppCompatActivity 带来了一系列全新的问题。
    【解决方案2】:

    这是您可以使用的另一种解决方案。它在我的应用程序中运行。

          @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了。

    【讨论】:

    • 非常感谢,但我已经解决了我的问题。我已阅读有关添加支持库的信息。
    • 为什么有 5 个赞?这不是 Activity 没有 getSupportActionBar() 方法的解决方案,它只是对代码风格的评论......
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      这是我的问题的答案。 我已经用一些评论再次问了这个问题。 How to add support libraries?

      【讨论】:

      • 这会使这个问题重复吗?
      【解决方案5】:

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

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

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          【解决方案7】:

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

           @Override
            public void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
          
              ActionBar actionBar =getSupportActionBar();
              actionBar.setDisplayHomeAsUpEnabled(true);            
            }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-01-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多