I have an application with two activities hosting fragments. My main activity hosts a single fragment, and that fragment is able to define and inflate a menu that goes in the toolbar, no problem.
In the second activity, though, which uses a FragmentStatePagerAdapter
to allow horizontal scrolling between items, my fragment does not seem able to define the menu in the toolbar.
Checks:
- My whole app is set to use a theme (
android:theme="@style/AppTheme"
) based onTheme.AppCompat.Light.DarkActionBar
. - My fragment extends
android.support.v4.app.Fragment
setHasOptionsMenu(true);
is called from the fragment'sonCreate()
method- the hosting activity extends
AppCompatActivity
and does not implement a toolbar menu itself - my fragment overrides
void onCreateOptionsMenu(Menu, MenuInflater)
, but this method seems to never be called
You can have a look at the commit that is supposed to add that menu on GitHub. (Or even look at any part of the code that might be a cause of error.)
Here are the big lines:
CrimeFragment.java
:
public class CrimeFragment extends Fragment {
// ...
@Override
public void onCreate(Bundle savedInstanceState) {
Log.d(TAG, "onCreate()");
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
UUID id = (UUID) getArguments().getSerializable(ARG_CRIME_ID);
Log.d(TAG, String.format("Crime id in intent's extra: %s", id.toString()));
mCrime = CrimeLab.get(getActivity()).getCrime(id);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
Log.d(TAG, "onCreateOptionsMenu()"); // <= Never shows in the Android Monitor
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.fragment_crime, menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_item_delete_crime:
CrimeLab.get(getActivity()).deleteCrime(mCrime);
getActivity().finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
// ...
}
Is there something I'm doing wrong here?