Reputation: 3139
I use Fragments and when I switch to nested Fragment, which implements public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
my menu inflates quantity of times when I get to that nested Fragment. How can I avoid this? I also implement constructor of Fragment with methods:
setRetainInstance(true);
setHasOptionsMenu(true);
When I tried to implement siple solution as:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
// TODO Add your menu entries here
if(!isInflated)
{
inflater.inflate(R.menu.contacts_archive_menu, menu);
isInflated = true;
}
super.onCreateOptionsMenu(menu, inflater);
}
but my menu wasn't inflate after the screen rotation.
Upvotes: 16
Views: 8626
Reputation: 2714
Just override the invalidateOptionsMenu, example:
private var isMenuCreated = false
...
override fun invalidateOptionsMenu() {
Log.d("invalidateOptionsMenu")
if (!isMenuCreated) {
super.invalidateOptionsMenu()
}
}
...
override fun onCreateOptionsMenu(menu: Menu): Boolean {
...
isMenuCreated = true
return true
}
Upvotes: 0
Reputation: 832
Use before replace.
fragment = new EditMyProfile();
FragmentTransaction fragmentTransactionEditProfile =getSupportFragmentManager().beginTransaction();
getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
fragmentTransactionEditProfile.replace(R.id.frame, fragment);
fragmentTransactionEditProfile.commit();
Upvotes: -1
Reputation: 2973
Just check the count of menu
items. Meaning menu.size()==0
,no menu
items are present,then inflate with layout menu
,else don't inflate at all.
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
if (menu.size() == 0)
inflater.inflate(R.menu.call_menu, menu);
super.onCreateOptionsMenu(menu, inflater);
}
Upvotes: 8
Reputation: 3139
I solved it simply by clearing menu before ionflating of it:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
menu.clear();
inflater.inflate(R.menu.call_menu, menu);
super.onCreateOptionsMenu(menu, inflater);
}
Upvotes: 41