Мое требование простое, я хочу открыть список элементов меню во фрагменте. Итак, я создал XML меню внутри меню и попытался раздуть его внутри метода onCreateOptionsMenu во фрагменте, но, к сожалению, ничего не отображается.
Вот:
myFragment.java
public static MoreFragment newInstance() {
return new MoreFragment();
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
menu.clear();
inflater.inflate(R.menu.more_drawer, menu);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
setHasOptionsMenu(true);
View v = inflater.inflate(R.layout.fragment_more, container, false);
setUp(v);
return v;
}
вот, more_drawer.xml:
<?xml version = "1.0" encoding = "utf-8"?>
<menu xmlns:android = "http://schemas.android.com/apk/res/android">
<item
android:id = "@+id/nav_busTracking"
android:icon = "@drawable/ic_more_drawer_bus_tracking"
android:title = "Bus Tracking" />
<item
android:id = "@+id/nav_kidsWallet"
android:icon = "@drawable/ic_more_drawer_kids_wallet"
android:title = "Kids' Wallet" />
<item
android:id = "@+id/nav_circlals"
android:icon = "@drawable/ic_more_drawer_circulars"
android:title = "Circulars" />
<item
android:id = "@+id/nav_message"
android:icon = "@drawable/ic_more_drawer_messages"
android:title = "Messages" />
<item
android:id = "@+id/nav_accountSettingd"
android:icon = "@drawable/ic_more_drawer_account_settings"
android:title = "@string/account_settings" />
<item
android:id = "@+id/nav_logout"
android:icon = "@drawable/ic_more_drawer_logout"
android:title = "Log Out" />
</menu>
fragment.xml:
<?xml version = "1.0" encoding = "utf-8"?>
<RelativeLayout xmlns:android = "http://schemas.android.com/apk/res/android"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
xmlns:app = "http://schemas.android.com/apk/res-auto">
</RelativeLayout>
Я попробовал поместить setHasOptionsMenu (истина) внутрь onCreate () и onCreateView (), но ничего не отображается.
Я попробовал отладить и обнаружил, что onCreateOptionsMenu () не вызывается. Я попробовал все решения этого вопроса, но ничего не пошло в мою пользу.
Что я делаю неправильно?
Измените это:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
menu.clear();
inflater.inflate(R.menu.more_drawer, menu);
}
К:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.more_drawer, menu);
super.onCreateOptionsMenu(menu, inflater);
}
И используйте: setHasOptionsMenu(true);
после того, как view inflates-created:
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
setHasOptionsMenu(true);
}
такой же результат ничего не приходит :(
public static MoreFragment newInstance
используют это в первой строке определения Fragment
? Кроме того, я обновил ответ с помощью onActivityCreated
.
Метод newInstance, используемый для замены моего фрагмента, и теперь он появляется, но он появляется на панели действий справа
Это весь код фрагмента? Если нет, вы бы вставили все это? Также попробуйте добавить setHasOptionsMenu(true);
после View v = inflater.inflate
. Он должен работать с этими изменениями.
Рад слышать этого приятеля!
Вы проверили свой файл манифеста?
Убедитесь, что тема, которую вы выбрали для занятия, включает панель действий. например: android: theme = "@ style / Theme.AppCompat">
@ ʍѳђ ઽ ૯ ท этот метод сам по себе не называется