web-dev-qa-db-ja.com

フラグメントのツールバーをアクションバーとして設定します

ツールバーをアクションバーとして設定したいのですが、ツールバーはレイアウト要素なので、レイアウト内にある必要があります。今、私のレイアウトは私のフラグメントにあります。

レイアウトにツールバーを追加し、フラグメント内で呼び出します:

//Toolbar
Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);

タイトルなどを設定できるので機能しますが、実際にはこれが欲しいので、アクションバーとして反応させたいです。 setDisplayHomeAsUpEnabled(true)

そのためには、ツールバーをアクションバーに変更する必要があります。

setSupportActionBar(toolbar);

それは私の断片では機能しません...

誰かがツールバーをフラグメントのアクションバーとして機能させるのを手伝ってくれますか?.

39
Laurenswuyts

ActionBarActivityは非推奨になったため、最初にgetActivity()からAppCompatActivityにアクティビティをキャストする必要があります。以下に例を示します。

((AppCompatActivity) getActivity()).getSupportActionBar().setSubtitle();

キャストする必要があるのは、getActivity()FragmentActivityを返し、AppCompatActivityが必要だからです。

試してください:

 ((AppCompatActivity)getActivity()).setSupportActionBar(toolbar);
26
notdrone

ActionBarはActivityプロパティです。特定のフラグメントからツールバーを所有アクティビティのActionBarとして設定する場合は、フラグメントを所有するアクティビティ(Fragment.getActivity())を取得し、そのActionBarプロパティを設定します。

次に、juseは、ツールバーをActionBarとして設定した後、戻る/戻るボタンを取得した後、ActionBarで最初に説明したのと同じsetDisplayHomeAsUpEnabledメソッドを使用します。

アプリにそのアクティビティ内に複数のフラグメントがある場合、これを明らかに慎重に管理する必要があります。

16
dominicoder

つかいます

((ActionBarActivity) getActivity()).getSupportActionBar().setSubtitle("Your Title");
7
Ravi

Kotlinを使用する場合、これを試してください:

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, state: Bundle?): View? { 
        (activity as AppCompatActivity).setSupportActionBar(your_toolbar)
        setHasOptionsMenu(true)

        return inflater.inflate(R.layout.your_layout, container, false)
}


override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) {
        inflater?.inflate(R.menu.your_menu, menu)
}
0
Miravzal

フラグメントを保持しているアクティビティがMainActivityであるとしましょう。

行う

MainActivity main = (MainActivity)getActivity();
//You can access all public variable and methods of MainActivity.
//simply call 
main.setSupportActionBar(toolbar)
main.getSupportActionBar.setTitle("title");
0