Откройте контекстное меню, нажав на пункт меню - PullRequest
4 голосов
/ 05 февраля 2011

Я использую Android, чтобы подать заявку.У меня есть действие, в котором я создаю меню параметров, как показано ниже

    @Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.mymenu, menu);
    return true;
}

Меню загружается из XML-файла:

<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:title="Item1" android:id="@+id/item1" /></menu>

Когда я нажимаю на элемент 1, я использую onOptionsItemSelected намоя работа после клика такова:

    @Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch(item.getItemId()) {
    case R.id.item1 :
        // here, I would like to open a contextual menu
        return true;
    default :
        return super.onOptionsItemSelected(item);
    }
}

Итак, когда пользователь нажимает на элемент 1, я хотел бы открыть контекстное меню.Во-первых, я не знаю, возможно ли открыть контекстное меню напрямую, не используя позицию удержания на экране, как это показывают несколько уроков в Интернете.

Если это возможно, как я могу открыть контекстное меню таким образом?

Я подумал использовать registerForContextMenu() и openContextMenu() в случае моего пункта 1, но какой вид я должен указать в параметре?

Если у кого-то есть идея о том, как это сделатьЯ хотел бы знать, как я должен это сделать.

Ответы [ 3 ]

4 голосов
/ 05 февраля 2011

Если вы действительно хотите иметь контекстное меню, то я бы использовал контекстное меню, как оно разработано в Android, выполняя долгое нажатие на заданный элемент.Люди привыкли к этому, и приложения не должны отличаться от этого.

Альтернатива немного сложнее.Что вы можете сделать, это загрузить свое меню в отдельное действие, которое вы стилизуете как диалоговое окно (вы знаете, с выцветшим полупрозрачным фоном).Это можно легко сделать, применив стиль Theme.Dialog к своей деятельности в файле manifest.xml:

<activity android:name=".activities.TagPopupActivity"
            android:label="Tagging" android:theme="@android:style/Theme.Dialog">
                ...
</activity>

В качестве альтернативы, вы также можете напрямую создать диалоговое окно, как описано здесь .Затем вы получаете контекст (т. Е. Щелчок в списке), внедряя соответствующий прослушиватель щелчков в основной активности списка, а затем, когда пользователь нажимает на элемент, вы извлекаете его идентификатор и упаковываете его в пакет, который вы перенаправляете в свое «меню».-активность в стиле всплывающего диалога.

1 голос
/ 10 июля 2012

Я знаю, что пост старый, но вот другое решение (быстрое, но не очень сексуальное).

Добавьте фиктивное представление с отключенной видимостью и используйте это представление для вызова контекстного меню.

0 голосов
/ 21 мая 2019
private final int OPTION_1 = 21;
private final int OPTION_2 = 22;    

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.mymenu, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle item selection
    ActionMenuItemView btn = findViewById(item.getItemId());

    switch (item.getItemId()) {
        case R.id.action_share:
            PopupMenu popupMenu = new PopupMenu(this, btn);
            popupMenu.getMenu().add(0, OPTION_1, 0, "Option 1");
            popupMenu.getMenu().add(0, OPTION_2, 0, "Option 2");
            popupMenu.setOnMenuItemClickListener(this::onClickMenu);
            popupMenu.show();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

private boolean onClickMenu(MenuItem menuItem) {
    switch (menuItem.getItemId()) {
        case OPTION_1:
            // Clicked option 1
            break;
        case OPTION_2:
            // Clicked option 2
            break;
    }

    return false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...