Позиционно-зависимые действия с ActionMode, как с контекстным меню
В старых приложениях я бы обычно использовал onCreateContextMenu()
со следующей подписью для контекстных действий:
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo)
menuInfo
предоставит мне информацию, для какого пункта в моем списке строится контекстное меню. Я мог тогда получить право Uri
найти подходящие для него действия и создать их как пункты меню (используя автоматические намерения или что-то еще).
Теперь, с более новыми API, заменой этого является контекстная панель действий, использующая ActionMode
:
public boolean onCreateActionMode(ActionMode mode, Menu menu)
public boolean onPrepareActionMode(ActionMode mode, Menu menu)
Но здесь, как я могу отличить предмет и / или получить информацию об этой позиции?
Для пакетного режима такой параметр, отсутствующий, имеет смысл, потому что вы должны предлагать только действия, которые применимы к чему-либо. Но для одиночного режима разве это не будет полностью эквивалентно старому API, за исключением того, что кнопки теперь находятся на панели действий?
Ссылка: http://developer.android.com/guide/topics/ui/menus.html
1 ответ
Даже для "пакетного" выбора вам все равно нужно выяснить, какие элементы выбраны для выполнения желаемого действия.
Насколько я знаю, часть "какие элементы выбраны" не рассматривается этими обратными вызовами и остается на усмотрение разработчика; нет общего способа маркировки предметов, а общий шаблон использует флажки. Обратите внимание, что состояние "выбранный" для элементов списка не должно быть переходным состоянием в том смысле, что если вы щелкнете по элементу, который нужно пометить, как "выбранный", он должен остаться выбранным визуально, чтобы пользователь мог понять, какой элемент продолжается Таким образом, вы можете обмануть обычный ListView, чтобы сохранить его "выбранное" состояние, или использовать флажки или аналогичные механизмы. В любом из этих подходов, будь то один или несколько выбранных элементов, у вас есть свой список, и вы можете запросить свой список, чтобы узнать, какие из них выбраны, и выполнить желаемое действие с ними.