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