web-dev-qa-db-ja.com

getSupportActionBar()メソッドgetSupportActionBar()は、タイプTaskActivityに対して未定義です。どうして?

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

Activityの代わりにACtionBarActivityを使用すると、実行しようとすると、電話で次のエラーが表示されます。

メソッドgetSupportActionBar()はTaskActivityタイプでは未定義です

これが私の質問の答えです。私はいくつかの発言でそれをもう一度尋ねました。 サポートライブラリを追加する方法

クラスは、getSupport*()メソッドを使用するために、プレーンなActionBarActivityではなく、 Activity から拡張する必要があります。

Update[2015/04/23]:Android Support Libraryのリリースで 22.1AppCompatActivity.また、アクティビティに ActionBarActivity インスタンスを組み込むことができるため、AppCompatActivityまたはAppCompatDelegateを拡張するhaveがなくなりました。

75
MH.

使用できる別のソリューションを次に示します。私のアプリで動作しています。

      @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が使用する1行のインポートを削除できます。

5
dongemus

既にActionBarActivityから拡張していて、フラグメントからアクションバーを取得しようとしている場合:

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

AppCompatActivityから拡張し、FragmentからActionBarを取得しようとしている場合、これを行うことができます。

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

Extends ActivityをAppCompactActivityを拡張するように変更してから、setおよびgetSupportActionBar()を試行する必要があります

1
Tony Jacob

Contient Viewを設定する前にActionBarを設定できますか?この順序はより良いでしょう:

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

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