web-dev-qa-db-fra.com

Remplacer la disposition de la barre d'outils en fonction du fragment affiché

J'ai une activité avec le tiroir de navigation qui remplace le main_fragment_container sur l'activité. Lorsque l'un des fragments est affiché, je souhaite modifier la disposition de la barre d'outils et y ajouter un spinner (et le supprimer lorsque le fragment est masqué).

Ma disposition ressemble à ça:

<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

Je ne sais pas ce que vous essayez d'accomplir, mais je pense que si possible, vous devriez aborder cela en laissant les fragments personnaliser votre barre d'outils plutôt que de la remplacer. Vous pouvez laisser vos fragments masquer/afficher des vues sur la barre d'outils en fonction de vos besoins.

Ajoutez setHasOptionsMenu(true); dans les fragments OnCreateView() puis remplacez onOptionsMenuCreated()

Comme ça:

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

Si vous avez besoin de faire des choses plus spécifiques avec la barre d'outils, vous pouvez obtenir l'instance en utilisant

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

43
Tapirboy