Я пытаюсь добавить пункт в меню параметров из группы фрагментов.
Я создал новый MenuFragment
класс и расширил его для фрагментов, в которые я хочу включить пункт меню. Вот код:
Ява:
public class MenuFragment extends Fragment {
MenuItem fav;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
fav = menu.add("add");
fav.setIcon(R.drawable.btn_star_big_off);
}
}
Котлин:
class MenuFragment : Fragment {
lateinit var fav: MenuItem
override fun onCreate(savedInstanceState: Bundle) {
super.onCreate(savedInstanceState)
setHasOptionsMenu(true)
}
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
fav = menu.add("add");
fav.setIcon(R.drawable.btn_star_big_off);
}
}
По некоторым причинам, onCreateOptionsMenu
кажется, не работает.
android
android-fragments
android-optionsmenu
misterbassman
источник
источник
Ответы:
Вызовите супер метод:
Ява:
Котлин:
Поместите операторы журнала в код, чтобы увидеть, не вызывается ли метод или не изменяется ли меню вашим кодом.
Кроме того, убедитесь , что вы вызываете
setHasOptionsMenu(boolean)
вonCreate(Bundle)
уведомить фрагмент , который он должен участвовать в обработке меню опций.источник
У меня была та же проблема, но я думаю, что лучше подвести итог и представить последний шаг, чтобы она заработала:
Добавьте метод setHasOptionsMenu (true) в метод вашего фрагмента
onCreate(Bundle savedInstanceState)
.Переопределите
onCreateOptionsMenu(Menu menu, MenuInflater inflater)
(если вы хотите сделать что-то другое в меню вашего Фрагмента) иonOptionsItemSelected(MenuItem item)
методы в своем Фрагменте.Внутри вашего
onOptionsItemSelected(MenuItem item)
метода Activity убедитесь, что вы возвращаете false, когда действие элемента меню будет реализовано вonOptionsItemSelected(MenuItem item)
методе Fragment.Пример:
Деятельность
Фрагмент
источник
setHasOptionsMenu(true);
СпасибоЕсли вы обнаружите, что
onCreateOptionsMenu(Menu menu, MenuInflater inflater)
метод не вызывается, убедитесь, что вы вызываете следующее изonCreate(Bundle savedInstanceState)
метода Fragment :источник
Toolbar
и должен был звонитьsetHasOptionsMenu(true)
вonCreateView()
вместо ,onCreate()
чтобы сделать это.Если вам нужно
menu
обновитьwebview
внутри конкретногоFragment
, вы можете использовать:Фрагмент :
menu.xml
источник
TL; DR
Используйте
android.support.v7.widget.Toolbar
и просто сделайте:Автономная панель инструментов
Большинство из предложенных решений, таких как,
setHasOptionsMenu(true)
работают только тогда, когда родительская активность имеет панель инструментов в макете и объявляет ее черезsetSupportActionBar()
. Затем Фрагменты могут участвовать в заполнении меню этого точного ActionBar :Если вам нужна отдельная панель инструментов и меню для одного конкретного фрагмента, вы можете сделать следующее:
menu_custom_fragment.xml
custom_fragment.xml
CustomFragment.kt
Да, это так просто. Вам даже не нужно переопределять
onCreate()
илиonCreateOptionsMenu()
.PS: Это работает только с
android.support.v4.app.Fragment
иandroid.support.v7.widget.Toolbar
(также обязательно используйтеAppCompatActivity
иAppCompat
тему в вашемstyles.xml
).источник
В
menu.xml
вы должны добавить все пункты меню. Затем вы можете скрыть элементы, которые вы не хотите видеть при начальной загрузке.menu.xml
Добавьте
setHasOptionsMenu(true)
метод onCreate () для вызова пунктов меню в вашем классе Fragment.FragmentClass.java
Вам не нужно переопределять
onCreateOptionsMenu
в вашем классе фрагмента снова. Пункты меню можно изменить (добавить / удалить) с помощьюonPrepareOptionsMenu
метода переопределения, доступного во фрагменте.источник
Вам нужно использовать menu.clear (), прежде чем раздувать меню.
а также
источник
В моем случае вот шаги.
Шаг 1
Шаг 2
Шаг 3
источник
menu.clear()
очищенное предыдущее меню. Работал для меня :)Если вы хотите добавить свое меню на заказ
источник
У меня была такая же проблема, мои фрагменты были страницами ViewPager. Причина, по которой это происходило, заключается в том, что при создании экземпляра FragmentPagerAdapter я использовал дочерний диспетчер фрагментов, а не диспетчер фрагментов поддержки активности.
источник
Файл меню:
Код деятельности:
Код фрагмента:
источник
Ваш код в порядке. Только супер отсутствовал в методе:
источник
Я сходил с ума, потому что ни один из ответов здесь не работал для меня.
Чтобы показать меню мне пришлось позвонить:
setSupportActionBar(toolbar)
Выполнено!
Примечание: если ваше
toolbar
представление не в том же макете активности, вы не можете использовать вышеуказанный вызов непосредственно из вашего класса активности, в этом случае вам нужно получить это действие из вашего класса фрагмента, а затем вызватьsetSupportActionBar(toolbar)
. Помните: ваш класс активности должен расширять AppCompatActivity.Надеюсь, что этот ответ поможет вам.
источник
Настройка меню параметров после создания фрагмента работала хорошо для меня.
источник
Моя проблема была немного другой. Я все сделал правильно. Но я унаследовал неправильный класс для действия, в котором размещен фрагмент.
Таким образом, для ясности, если вы переопределяете
onCreateOptionsMenu(Menu menu, MenuInflater inflater)
фрагмент, убедитесь, что ваш класс активности, в котором находится этот фрагмент, наследуетandroid.support.v7.app.ActionBarActivity
(на случай, если вы захотите поддерживать ниже уровня API 11).Я унаследовал,
android.support.v4.app.FragmentActivity
чтобы поддерживать уровень API ниже 11.источник
Я хотел бы добавить одну вещь к этому и причину, по которой она не работает для меня.
Это похоже на ответ Napster.
Убедитесь, что хостинг вашего фрагмента расширяется
AppCompatActivity
, а неFragmentActivity
!Из Справочной документации Google для FragmentActivity:
Чтобы обновить ответ Napster -
ActionBarActivity
теперь не рекомендуется использоватьAppCompatActivity
вместо этого.При использовании
AppCompatActivity
также убедитесь, что вы установили «тему деятельностиTheme.AppCompat
или аналогичную тему» (Google Doc).Примечание:
android.support.v7.app.AppCompatActivity
является подклассомandroid.support.v4.app.FragmentActivity
класса (см. Документацию AppCompatActivity ).источник
В папке вашего меню создайте XML-файл .menu и добавьте этот XML-файл.
В вашем фрагменте класса overide этот метод и
Теперь просто настройте свой XML-файл меню в классе фрагмента.
источник
Если все вышеперечисленное не работает, вам необходимо отладить и убедиться, что была вызвана функция onCreateOptionsMenu (поместив журнал отладки или записи ...)
Если он не запущен, возможно, ваша тема Android не поддерживает панель действий. Откройте AndroidManifest.xml и установите значение для
android:theme
панели действий поддержки тем :источник
на вашем OnCreate метод добавления setHasOptionMenu ()
Затем переопределите свой onCreateOptionsMenu
источник