MultiChoiceMode перед API 11

Я реализую ActionMode в своем Android-приложении с помощью ActionBarSherlock. С ABS можно создать ActionMode до API 11, но с легкостью: listView.setMultiChoiceModeListener( new MultiChoiceModeListener() ... не для приложения до API 11. У кого-нибудь хороший способ создать контекстное меню режима действия до API 11? Я хочу сделать длинный щелчок по элементу списка и запустить ActionMode, в котором я могу щелкнуть несколько элементов. На простом клике я покажу подробный сайт элемента списка. Я использую метод registerForContext(), но это делает простой и длинный щелчок.

У кого-нибудь хороший совет для меня.

РЕДАКТИРОВАТЬ
Решение для моего вопроса следующее: В длинном элементе нажмите i, чтобы активировать режим действия и сохранить его в переменной. В методе щелчка элемента item я реализую инструкцию if-else с помощью:

if( actionMode == null )
{
   // open new activity or update second fragment
   showDetails( itemPosition );
}
else
{
   // update ui or close CAB if no item selected
   showCAB( itemPosition );
}

Метод showCAB (позиция) обновляет выбранный счетчик элементов, выделяет фон элемента и т.д.

Ответы

Ответ 1

Хорошо, я сделал это сегодня, благодаря этому сайту: http://www.miximum.fr/tutos/849-porting-the-contextual-anction-mode-for-pre-honeycomb-android-apps

В принципе, вам просто нужно установить для ListView ChoiceMode значение ListView.CHOICE_MODE_MULTIPLE, чтобы установить onItemClickListener, который будет проверять, какие элементы отмечены в ListView, и создать личный класс, реализующий ActionMode.Callback, который будет управлять контекстуальным ActionBar.

Я отпустил этот блог-блог, чтобы увидеть все подробное и часть кода!

Ответ 2

Вы также можете посмотреть приложение Google I/O 2012. Он открывает исходный код и использует ActionBarSherlock. Они разработали совместимую версию классов ActionMode, которые отлично работают с АБС и на устройствах сотовой связи.

В частности, посмотрите:

  • SessionsFragment класс: он показывает использование версии совместимости ActionMode
  • util.actionmodecompat package: содержит совместимость ActionMode классы

В принципе, как и в случае с ABS, они используют встроенную реализацию ActionMode, когда она доступна, и возвращаются к пользовательской реализации на более старых устройствах.

Надеюсь, что это поможет!