web-dev-qa-db-ja.com

ActionBar(サポート)とFragment(サポート)

Android Gingerbreadを対象とするアプリケーションの1つでも、アクションバーとフラグメントの組み合わせを使用する必要があります。そのため、v7サポートライブラリのアクションバーとv4サポートライブラリのフラグメントを使用しましたそしてFragmentActivityで私のクラスを拡張します。

行を入力するとエラーが発生する

actionbar = getSupportActionBar();

エラーはgetSupportActionBar()がタイプmyFragmentClass(私のクラス名)に対して未定義であることを示しています。コードは、サポートライブラリがなくても完全に機能します。私の問題に対する解決策はありますか?

ありがとう!

18
Anirudh

フラグメント付きのActionbarを使用するには、FragmentActivityではなくActionBarActivityを拡張する必要があります。

V7 appcompatライブラリーを使用している場合、アクティビティはFragmentActivityのサブクラスであるActionBarActivityを拡張する必要があります(詳細については、アクションバーの追加をご覧ください)。

詳細は、以下のページで確認できます。上記の行は、以下のページ(最後の段落)から取得されています。 http://developer.Android.com/training/basics/fragments/creating.html

編集-これはバグではありません。その知識の欠如。時々、基本的なことがはっきりしない。私は現在、Androidウェブサイトからも学んでいます。それが私があなたに答えを与える方法です。

19
user3426273

onAttach()メソッドでこのコードを記述します。

_actionBar = ((ActionBarActivity) getActivity()).getSupportActionBar();
_

ActionBarActivityは非推奨です。使用する

actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar();

41
bGorle

私も使用してみました:

actionbar = getActivity().getSupportActionBar();

そして私がこれをするまでそれは機能しませんでした:

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

それで、MainActivityにキャストするとうまくいきました。

8
Tinashe

for Android.support.v7

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

//than next for example 
actionBar.setDisplayHomeAsUpEnabled(true);
8
Yuliia Ashomok

Fragment内でActionBarを呼び出すには、これを使用します。

actionbar = getActivity().getSupportActionBar();

フラグメントにはActionBarはなく、Activityがあります。そのため、このように呼ぶ必要があります。

1
Steve Benett

私はActionBarActivityを拡張して試してみて、AndroidManifest.xmlにいくつかの変更を加えました

 <activity Android:name="yourActionbarActivity" 

Android:theme = "@ style/Theme.AppCompat.Light">

そしてそれは私にとってはうまくいきます

0
Zulfiqar