Параметры динамического контекстного меню - PullRequest
1 голос
/ 17 июня 2010

Можно ли создать динамическое контекстное меню в Android?

Что я имею в виду, например, если у меня есть список элементов, который может находиться в двух состояниях: «прочитано» и «непрочитано»».Я хочу иметь возможность вызвать контекстное меню с опцией «Пометить как прочитанное» для непрочитанных элементов и «Пометить как непрочитанное» для прочитанных элементов.

Итак, нажмите:

> read
> unread <-- click
> read 

отобразит контекстное меню «Пометить как прочитанное», в результате чего:

> read
> read
> read   <-- click

отобразит меню «Пометить как непрочитанное».

Есть ли какая-то функция, которая позволяет мненастроить создание контекстного меню непосредственно перед его отображением?

Любая помощь приветствуется!

Ответы [ 2 ]

5 голосов
/ 17 июня 2010

Поскольку вы не предоставляете код, это основной подход:

@Override
public void onCreateContextMenu(ContextMenu contextMenu,
                                View v,
                                ContextMenu.ContextMenuInfo menuInfo) {
    AdapterView.AdapterContextMenuInfo info =
            (AdapterView.AdapterContextMenuInfo) menuInfo;

    String actionString = "Mark as Read";

    // if it's alredy read
    if ( ((TextView) info.targetView).getText().toString().equals("read") )
        actionString = "Mark as Unread";

    menu.setHeaderTitle("Action");
    menu.add(0, 0, 0, actionString);
}

В этом случае я предполагаю, что список заполнен TextView s, который может содержать строку "читать "или" непрочитанные "в нем.Как я уже сказал, это очень простой подход.Здесь важно заметить, как используется объект ContextMenu.ContextMenuInfo.

Также, чтобы прочитать состояние выбранного элемента, вы можете использовать метод item.getMenuInfo() внутри метода onContextItemSelected(MenuItem item).

1 голос
/ 18 июня 2012

Я бы сделал это, создав два отдельных пункта меню, «Пометить как прочитанное» и «Пометить как непрочитанные», а затем скрыть один из них при каждом отображении меню:

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
                                ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.context_menu, menu);
    if (<is unread>)
        menu.findItem(R.id.mark_unread).setVisible(false);
    else
        menu.findItem(R.id.mark_read).setVisible(false);
}

Установка текста (и особенно чтение текста) непосредственно из кода является хрупкой; текст может измениться, а что если вы хотите поддерживать несколько языков?

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