Ответ 1
Да, я тоже не мог найти - мне нужно было спросить у Google я | O.
Используйте startActionMode()
. Вот один из их образцов, который демонстрирует это. Мне нужно больше работать в этой области.
В Android 3.0 при выборе некоторого текста ActionBar переключается в режим ContextMenu, который позволяет выполнять действия с выбранным текстом: копировать/совместно использовать /etc, а кнопка "Готово" появляется на с левой стороны, чтобы пользователь мог выйти из этого режима.
Как я могу переключить ActionBar в этот режим в моем приложении (конечно, с моими пунктами меню)? Я просто не мог найти это в документах.
Да, я тоже не мог найти - мне нужно было спросить у Google я | O.
Используйте startActionMode()
. Вот один из их образцов, который демонстрирует это. Мне нужно больше работать в этой области.
Чтобы использовать новый контекстный экран действий, см. " Включение контекстного режим действия для отдельных просмотров ". В нем указано:
Если вы хотите вызвать режим контекстного действия только тогда, когда пользователь выбирает конкретные просмотров, вы должны:
ActionMode.Callback
. В методах обратного вызова вы
может указывать действия для панели контекстных действий, реагировать на события кликов на элементах действия и обрабатывать другие события жизненного цикла для режима действия.startActionMode()
, когда вы хотите показать
bar (например, когда пользователь долго щелкает над представлением).Например:
ActionMode.Callback
:
private ActionMode.Callback mActionModeCallback = new ActionMode.Callback() {
// Called when the action mode is created; startActionMode() was called
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
// Inflate a menu resource providing context menu items
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.context_menu, menu);
return true;
}
// Called each time the action mode is shown. Always called after onCreateActionMode, but
// may be called multiple times if the mode is invalidated.
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false; // Return false if nothing is done
}
// Called when the user selects a contextual menu item
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_share:
shareCurrentItem();
mode.finish(); // Action picked, so close the CAB
return true;
default:
return false;
}
}
// Called when the user exits the action mode
@Override
public void onDestroyActionMode(ActionMode mode) {
mActionMode = null;
}
};
Обратите внимание, что эти обратные вызовы почти точно совпадают с обратными вызовами для меню опций, за исключением того, что каждый из них также передает объект ActionMode
, связанный с событием. Вы можете использовать API ActionMode
для внесения различных изменений в CAB, таких как пересмотр заголовка и
субтитры с setTitle()
и setSubtitle()
(полезно указать количество элементов
выбран).
Также обратите внимание, что приведенный выше пример устанавливает переменную mActionMode
null, когда
режим действия уничтожен. На следующем шаге вы увидите, как он инициализируется и как сэкономить
переменная-член в вашей деятельности или фрагменте может быть полезна.
startActionMode()
, чтобы включить контекстный
когда это необходимо, например, в ответ на долгое нажатие на View
:
someView.setOnLongClickListener(new View.OnLongClickListener() {
// Called when the user long-clicks on someView
public boolean onLongClick(View view) {
if (mActionMode != null) {
return false;
}
// Start the CAB using the ActionMode.Callback defined above
mActionMode = getActivity().startActionMode(mActionModeCallback);
view.setSelected(true);
return true;
}
});
Когда вы вызываете startActionMode()
, система возвращает
созданный ActionMode
. Сохраняя это в переменной-члене, вы можете
вносить изменения в панель контекстных действий в ответ на другие события. В приведенном выше примере
ActionMode
используется для обеспечения того, чтобы экземпляр ActionMode
не воссоздается, если он уже активен, проверяя, является ли элемент пустым до начала
режим действия.
Если у вас есть набор элементов в ListView
или GridView
(или другом расширении AbsListView
) и вы хотите
позволяют пользователям выполнять пакетные действия, вы должны:
AbsListView.MultiChoiceModeListener
и установите его
для группы просмотра с setMultiChoiceModeListener()
. В методах обратного вызова слушателя вы можете указать действия
для контекстной панели действий, реагировать на события кликов на элементах действия и обрабатывать другие обратные вызовы
унаследованный от интерфейса ActionMode.Callback
.setChoiceMode()
с аргументом CHOICE_MODE_MULTIPLE_MODAL
.Например:
ListView listView = getListView();
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
listView.setMultiChoiceModeListener(new MultiChoiceModeListener() {
@Override
public void onItemCheckedStateChanged(ActionMode mode, int position,
long id, boolean checked) {
// Here you can do something when items are selected/de-selected,
// such as update the title in the CAB
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
// Respond to clicks on the actions in the CAB
switch (item.getItemId()) {
case R.id.menu_delete:
deleteSelectedItems();
mode.finish(); // Action picked, so close the CAB
return true;
default:
return false;
}
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
// Inflate the menu for the CAB
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.context, menu);
return true;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
// Here you can make any necessary updates to the activity when
// the CAB is removed. By default, selected items are deselected/unchecked.
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
// Here you can perform updates to the CAB due to
// an invalidate()
request
return false;
}
});
Что это. Теперь, когда пользователь выбирает элемент с длинным щелчком, система вызывает onCreateActionMode()
метод и отображает контекстную панель действий с указанными действиями. Хотя контекстуальные
панель действий видна, пользователи могут выбирать дополнительные элементы.
В некоторых случаях, когда контекстные действия предоставляют общие элементы действия, вы можете
хотите добавить флажок или аналогичный элемент пользовательского интерфейса, который позволяет пользователям выбирать элементы, поскольку они
может не обнаруживать долгое нажатие. Когда пользователь выбирает флажок, вы
может вызвать режим контекстного действия, установив соответствующий элемент списка на проверочный
состояние с setItemChecked()
.
Может быть, немного поздно, но вот учебник для actionmode: http://www.vogella.com/articles/AndroidListView/article.html#listview_actionbar