'Button in Action Menu in Title bar doesn't Work

When I click the button in the title bar it doesn't do any thing.

I use item in menu and I linked it to main activity class but it doesn't work.

@Override
        public boolean onPrepareOptionsMenu(Menu menu) {
    
            return true;
    
        }
    
     @Override
            public boolean onCreateOptionsMenu(Menu menu) {
                // Inflate the menu; this adds items to the action bar if it is present.
                getMenuInflater().inflate(R.menu.menu_main, menu);
                // Inflate switch
        
        
        
                notification_badge = (TextView) menu.findItem(R.id.my_action).getActionView()
                        .findViewById(R.id.notification_badge);
        
        
                ImageButton notification_open = (ImageButton) menu.findItem(R.id.my_action).getActionView()
                        .findViewById(R.id.Notificatio_open);
        
                ImageButton addFollwes = (ImageButton) menu.findItem(R.id.my_action).getActionView()
                        .findViewById(R.id.my_action_search);
        
                notification_badge.setVisibility(View.GONE);
        
                addFollwes.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        startActivity(new Intent(MainActivity.this, SearchActivity.class));
        
                    }
                });
                notification_open.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        startActivity(new Intent(MainActivity.this, com.account.Notification.class));
                        //    notification_badge.setVisibility(View.GONE);
        
                    }
                });
        
        
                Switch mSwitchNightMode = (Switch) menu.findItem(R.id.item_switch)
                        .getActionView().findViewById(R.id.Switchedbtn);
        
        
                // Get state from preferences
        
        
        
                return true;
        
        
            }
        
        
            @Override
            public boolean onOptionsItemSelected(MenuItem item) {
                switch (item.getItemId()) {
                    case R.id.my_action:
        
                        startActivity(new Intent(MainActivity.this, SettingsActivity.class));
                        return true;
        
                    case R.id.my_action_search:
        
                        startActivity(new Intent(MainActivity.this, SearchActivity.class));
                        return true;
        
        
                    default:
                        // If we got here, the user's action was not recognized.
                        // Invoke the superclass to handle it.
                        return super.onOptionsItemSelected(item);
        
                }
            }


Solution 1:[1]

It's hard to tell without looking at the XML menu layout code. I am guessing that something went wrong such that findViewById for the menu did not register. You don't have to explicitly identify the menu items, but actually the entire menu. Then we can query which item was clicked via a switch statement.

Below I provide a simple way of handling menu

Layout

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/menu_item_01"
        android:title="1"/>
    <item
        android:id="@+id/menu_item_02"
        android:title="2"/>
    <item
        android:id="@+id/menu_item_03"
        android:title="3"/>
</menu>

Java

import androidx.appcompat.widget.PopupMenu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;

private ImageView menuButton;
private PopupMenu mainMenu;
private MenuInflater menuInflater;

menuButton = findViewById(R.id.menu_button);
menuButton.setOnClickListener(new View.OnClickListener()
{
    @Override
    public void onClick(View v)
    {
        mainMenu = new PopupMenu(MainActivity.this, v);
        menuInflater = mainMenu.getMenuInflater();

        mainMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener()
        {
            @Override
            public boolean onMenuItemClick(MenuItem item)
            {
                switch(item.getItemId())
                {
                    case R.id.menu_item_01:
                        // perform action
                        return true;
                    case R.id.menu_item_02:
                        // perform action
                        return true;
                    case R.id.menu_item_03:
                        // perform action
                        return true;
                    default:
                        return false;
                }
            }
        });
        menuInflater.inflate(R.menu.main_menu, mainMenu.getMenu());
        mainMenu.show();
    }
});

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 mindoverflow