Как добавить элементы в строку меню с помощью нового MenuProvider?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как добавить элементы в строку меню с помощью нового MenuProvider?

Сообщение Anonymous »

Вопрос для новичков. Поскольку старая парадигма, использовавшая во фрагментах «setHasOptionsMenu(true)», недавно была объявлена ​​устаревшей в Android Studio, я пытаюсь преобразовать свое приложение в новейшую схему, как описано в документации. Все объяснения по этому поводу я могу найти вокруг следующего фрагмента кода из указанной документации:

Код: Выделить всё

/**
* Using the addMenuProvider() API directly in your Activity
**/
class ExampleActivity : ComponentActivity(R.layout.activity_example) {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

// Add menu items without overriding methods in the Activity
addMenuProvider(object : MenuProvider {
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
// Add menu items here
menuInflater.inflate(R.menu.example_menu, menu)
}

override fun onMenuItemSelected(menuItem: MenuItem): Boolean {
// Handle the menu selection
return true
}
})
}
}

/**
* Using the addMenuProvider() API in a Fragment
**/
class ExampleFragment : Fragment(R.layout.fragment_example) {

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
// The usage of an interface lets you inject your own implementation
val menuHost: MenuHost = requireActivity()

// Add menu items without using the Fragment Menu APIs
// Note how we can tie the MenuProvider to the viewLifecycleOwner
// and an optional Lifecycle.State (here, RESUMED) to indicate when
// the menu should be visible
menuHost.addMenuProvider(object : MenuProvider {
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
// Add menu items here
menuInflater.inflate(R.menu.example_menu, menu)
}

override fun onMenuItemSelected(menuItem: MenuItem): Boolean {
// Handle the menu selection
return true
}
}, viewLifecycleOwner, Lifecycle.State.RESUMED)
}
Теперь я попытался добавить этот код в свое основное действие (расширяющее AppCompatActivity() ) и связанные с ним фрагменты. Везде, где написано «R.menu.example_menu», я вставил свои собственные файлы макета меню, которые в большинстве случаев содержат только один элемент настроек.
Однако, хотя код компилируется без ошибок , ни один элемент фактически не добавляется в строку меню. Что мне не хватает? Должен ли я добавлять элементы вручную там, где написано «добавить пункты меню сюда»? Однако запись чего-то вроде "menu.add("Settings"), похоже, тоже не дает эффекта.

Подробнее здесь: https://stackoverflow.com/questions/732 ... nuprovider
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»