onCreateOptionsMenu() dans le fragment de non-remplacement d'un ActionBar menus

Je suis en utilisant le NavigationDrawer dans mon application et remplacer le fragment lorsque vous cliquez sur un élément dans le tiroir. Mon problème que j'ai est que les éléments de menu dans l'ActionBar ne sont pas mis à jour lorsque je modifie le fragment.

J'ai suivi ce tutoriel https://www.grokkingandroid.com/adding-action-items-from-within-fragments/ de près, mais ça ne marche toujours pas dans mon application.

Ajoutant quelques extraits de code de l'activité parent et l'un des Fragments ici.
Ce dont j'ai besoin est pour afficher les autres options de menu du formulaire de contact fragment (R. menu.contactform_send_menu) lorsque le fragment initial est remplacé par ContactFormFragment.java.

public class MainActivity extends FragmentActivity implements ActionBar.OnNavigationListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setTitle(R.string.app_name);
//Set up the action bar to show a dropdown list.
ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
actionBar.setDisplayShowTitleEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeButtonEnabled(true);
createNavigationDrawer(savedInstanceState);
}
private final int DRAWER_MAIN = 0;
private final int DRAWER_CONTACT = 5;
//update the main content by replacing fragments
private void selectItem(int position) {
Fragment fragment = null;
Bundle args = new Bundle();
boolean isFragment = false;
switch (position) {
case DRAWER_MAIN:
fragment = new WelcomeSectionFragment();
args.putString(WelcomeSectionFragment.ITEM_NAME, dataList.get(position).getItemName());
args.putInt(WelcomeSectionFragment.IMAGE_RESOURCE_ID, dataList.get(position).getImgResID());
getActionBar().setTitle(R.string.app_name);
isFragment = true;
break;
case DRAWER_CONTACT:
fragment = new ContactFormFragment();
args.putString(ContactFormFragment.ITEM_NAME, dataList.get(position).getItemName());
args.putInt(ContactFormFragment.IMAGE_RESOURCE_ID, dataList.get(position).getImgResID());
getActionBar().setTitle(R.string.contactform_title);
isFragment = true;
break;
default:
break;
}
if (isFragment) {
fragment.setArguments(args);
FragmentManager frgManager = getFragmentManager();
frgManager.beginTransaction().replace(R.id.content_frame, fragment).commit();
mDrawerList.setItemChecked(position, true);
setTitle(dataList.get(position).getItemName());
mDrawerLayout.closeDrawer(mDrawerList);
}
}
}

et le fragment:

public class ContactFormFragment extends Fragment {
public ContactFormFragment() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ca = getActivity();
Reachability.registerReachability(ca.getApplicationContext());
settings = ca.getSharedPreferences(Konstanten.PREFERENCES_FILE, 0);
member = new Gson().fromJson(settings.getString(Konstanten.MEMBER_OBJECT, null), Member.class);
latoFontLight = Tools.getFont(ca.getAssets(), "Lato-Light.ttf");
latoFontBold = Tools.getFont(ca.getAssets(), "Lato-Bold.ttf");
//Update action bar menu items?
setHasOptionsMenu(true);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
//Do something that differs the Activity's menu here
super.onCreateOptionsMenu(menu, inflater);
menu.clear();
if (Build.VERSION.SDK_INT >= 11) {
//selectMenu(menu);
inflater.inflate(R.menu.contactform_send_menu, menu);
}
}
}

Lors du débogage, je peux voir que setHasOptionsMenu(true); qui est appelé dans onCreate() et je reçois aussi dans le onCreateOptionsMenu() de ContactFormFragment.java. Je ne comprends juste pas pourquoi la barre d'action et conserve ses initiales des éléments de menu et de ne pas les remplacer. Ce qui me manque?

Merci pour toute aide.

Lors du débogage fait appel onCreateOptionsMenu() dans votre Activity par la suite (après la fermeture du tiroir)?
oui, c'est fait. Une fois le tiroir fermé onCreateOptionsMenu() est appelée de nouveau dans le parent de l'Activité. Je suppose que ce qui détruit les éléments de menu à partir du fragment. Comment puis-je éviter cela?
essayez d'appeler le menu.clear() et le inflater.gonfler avant super.onCreateOptionsMenu()

OriginalL'auteur e-nature | 2014-04-26