Подтвердить что ты не робот

Как вызвать поведение ActionBar ContextMenu?

В Android 3.0 при выборе некоторого текста ActionBar переключается в режим ContextMenu, который позволяет выполнять действия с выбранным текстом: копировать/совместно использовать /etc, а кнопка "Готово" появляется на с левой стороны, чтобы пользователь мог выйти из этого режима.

Как я могу переключить ActionBar в этот режим в моем приложении (конечно, с моими пунктами меню)? Я просто не мог найти это в документах.

4b9b3361

Ответ 1

Да, я тоже не мог найти - мне нужно было спросить у Google я | O.

Используйте startActionMode(). Вот один из их образцов, который демонстрирует это. Мне нужно больше работать в этой области.

Ответ 2

enter image description here

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

Если вы хотите вызвать режим контекстного действия только тогда, когда пользователь выбирает конкретные просмотров, вы должны:

  • Внедрить интерфейс 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

Если у вас есть набор элементов в 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().