Dennis Manicani Jr.
Dennis Manicani Jr.

Reputation: 123

How to inflate Menu inside a fragment?

I am trying to add a search function and want to inflate an ActionBar that has a menu item inside a fragment.

Since onCreateOptionsMenu is deprecated, what do I use as replacement, or is that function still usable? Thanks!

Upvotes: 1

Views: 619

Answers (1)

Sohaib Ahmed
Sohaib Ahmed

Reputation: 3062

Use this code,

Kotlin

val menuHost = activity!! as MenuHost
menuHost.addMenuProvider(object : MenuProvider {
     override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
         menuInflater.inflate(R.menu.menu_delete, menu)
     }

     override fun onMenuItemSelected(menuItem: MenuItem): Boolean {
         when (menuItem.itemId) {
             R.id.menu_item_delete -> deleteAll()
         }
         return true
     }
}, viewLifecycleOwner, Lifecycle.State.RESUMED)

Java

MenuHost menuHost = getActivity();
menuHost.addMenuProvider(new MenuProvider() {
    Override
    public void onCreateMenu(@NonNull Menu menu, @NonNull MenuInflater menuInflater) {
        menuInflater.inflate(R.menu.menu_delete, menu);
    }

    @Override
    public boolean onMenuItemSelected(@NonNull MenuItem menuItem) {
        if (menuItem.getItemId() == R.id.menu_item_delete) {
            deleteAll();
        }
        return true;
    }
}, getViewLifecycleOwner(), Lifecycle.State.RESUMED);

onCreateOptionsMenu is deprecated

Yes, it has been deprecated (can also works as well) but Android team has introduced a new way to implement onCreateMenu & onOptionsMenuItem as above.

Note: Add this dependency, if not added in gradle.

implementation "androidx.activity:activity-ktx:1.6.1"

Upvotes: 3

Related Questions