У меня есть приложение с двумя фрагментами активности. Моя основная активность содержит один фрагмент, и этот фрагмент может определить и раздуть меню, которое находится на панели инструментов, без проблем.
Однако во втором действии, которое использует FragmentStatePagerAdapter
для горизонтальной прокрутки между элементами, мой фрагмент, похоже, не может определить меню на панели инструментов.
Проверки:
- Все мое приложение настроено на использование темы (
android:theme="@style/AppTheme"
) на основеTheme.AppCompat.Light.DarkActionBar
. - Мой фрагмент расширяет
android.support.v4.app.Fragment
setHasOptionsMenu(true);
это вызывается из методаonCreate()
фрагмента- хостинговая активность расширяет
AppCompatActivity
и не реализует само меню панели инструментов - мой фрагмент переопределяет
void onCreateOptionsMenu(Menu, MenuInflater)
, но этот метод, кажется, никогда не вызывается
Вы можете посмотреть коммит, который должен добавить это меню, на GitHub. (Или даже посмотрите на любую часть кода, которая может быть причиной ошибки.)
Вот большие строки:
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);
}
}
// ...
}
Есть ли что-то, что я делаю неправильно здесь?
s
:onPrepareOptionsMenu
) в моем фрагменте он тоже не вызывается... - person David Stosik   schedule 04.11.2016onCreateOptionsMenu
, а фрагмент может это сделать? В документации Android говорится, что и действия, и фрагменты могут определять элементы меню, здесь: developer.android.com/guide/topics/ui/menus.html#options-menu - person David Stosik   schedule 04.11.2016