Chud37
Chud37

Reputation: 5007

Adding long press to dynamically generated menu items

Okay, so I have a dynamic menu (In my navigation drawer), generated like so:

In my Main.java onCreate():

DatabaseManager databaseAccess = DatabaseManager.getInstance(this);
databaseAccess.open();
List<String> folders = databaseAccess.getFolders();
databaseAccess.close();

// Set up the menu items
setupMenu(folders);

This gets the headings into an array called 'folders', then runs the setupMenu function:

private void setupMenu(List<String> folders) {
    // Sets up the menu
    Log.i("Folder Size",String.valueOf(folders.size()));
    NavigationView navView = findViewById(R.id.nav_view);
    Menu menu = navView.getMenu();
    int x = 0;
    while(x < folders.size()) {
        menu.add(R.id.myfolders,Menu.NONE,Menu.NONE,folders.get(x++));
    }
    navView.invalidate();
}

Which adds it to the id:myfolders in activity_main_drawer:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:showIn="navigation_view">

    <item android:title="My Folders"
        android:orderInCategory="1"
        android:id="@+id/myfolders">
        <menu></menu>
    </item>

    <item android:checkableBehavior="single" android:orderInCategory="2">
        <menu android:id="@+id/about_menu">
            <item  android:id="@+id/system_about"
                    android:title="About"
                    android:icon="@drawable/ic_info" />
            </menu>
    </item>
</menu>

This all works perfectly, however I want to add longpress functionality to my menu items. I have no idea how to go about doing this, can anyone help?

Upvotes: 0

Views: 94

Answers (1)

RonTLV
RonTLV

Reputation: 2556

You get a MenuItem from menu.add() then you can call:

menuItem.getActionView().setOnLongClickListener(new View.OnLongClickListener() {
    @Override
    public boolean onLongClick(View v) {
        return false; // true
    }
});

But not before you set action view: menuItem.setActionView(new ImageButton(this)).

Upvotes: 1

Related Questions