web-dev-qa-db-ja.com

表示されたフラグメントに従ってツールバーのレイアウトを置き換えます

アクティビティのmain_fragment_containerを置き換えるナビゲーションドロワーを持つアクティビティがあります。フラグメントの1つが表示されたら、ツールバーのレイアウトを変更し、それにスピナーを追加します(フラグメントが非表示になったら削除します)。

私のレイアウトは次のようになります。

<LinearLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    xmlns:sothree="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/main_parent_view"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical"
Android:fitsSystemWindows="true">

<Android.support.v7.widget.Toolbar

    Android:id="@+id/toolbar"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    sothree:theme="@style/AppTheme.ActionBar" />

<Android.support.v4.widget.DrawerLayout
    Android:id="@+id/drawer_layout"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">

    <!-- Main layout -->
    <FrameLayout
        Android:id="@+id/main_fragment_container"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent" />

    <!-- Nav drawer -->
    <fragment
        Android:id="@+id/fragment_drawer"
        Android:name="com.idob.mysoccer.ui.DrawerFragment"
        Android:layout_width="@dimen/navigation_drawer_width"
        Android:layout_height="match_parent"
        Android:layout_gravity="left|start" />
</Android.support.v4.widget.DrawerLayout>
21
Idob

何を達成しようとしているのかわかりませんが、可能であれば、フラグメントをツールバーに置き換えるのではなくカスタマイズさせることで、これにアプローチする必要があると思います。フラグメントは、必要に応じてツールバーのビューを非表示/表示できます。

setHasOptionsMenu(true);をフラグメントOnCreateView()に追加し、onOptionsMenuCreated()をオーバーライドします

このような:

_@Override
public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    setHasOptionsMenu(true);
    return inflater.inflate(R.layout.result_list, container, false);
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.this_frag_menu, menu);
    super.onCreateOptionsMenu(menu, inflater);
}
_

ツールバーでより具体的なことを行う必要がある場合は、次を使用してインスタンスを取得できます

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

43
Tapirboy