Как узнать, какое представление вызвало мой ActionMode?

Только что заявил, что узнал о панели действий ICS. Я работаю с Action Bar Sherlock, чтобы обеспечить обратную совместимость для вещей, которые я хочу делать, и просмотрел множество исходных кодов его образцов.

У меня есть 3 вида изображений, я хочу установить прослушиватель для длительного щелчка по всем 3. Когда пользователь долго щелкает один, я покажу ActionMode над панелью действий, позволяя им сделать снимок. Поскольку панель действий, кажется, работает так же, как меню, как я узнаю, какой ImageView вызвал мой ActionMode после того, как они нажали кнопку из него?

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


person Seth Hikari    schedule 11.02.2012    source источник


Ответы (2)


Чтобы инициировать режим действия, вам необходимо предоставить экземпляр класса ActionMode.Callback. Для чего-то подобного вы должны создать конструктор внутри этого класса, который принимает некоторую соответствующую информацию о представлении изображения.

public static class ImageActionMode extends ActionMode.Callback {
    private final int viewId;

    public ImageActionMode(View view) {
        viewId = view.getId();
    }

    public boolean onActionItemClicked (ActionMode mode, MenuItem item) {
        //Do something with viewId as the target
    }

    //Other callbacks
}

Вы также можете сохранить ссылку на полный ImageView или что-то еще, что вам нужно, чтобы ответить на элемент параметров.

Теперь, когда вы запускаете режим действия, вы должны сделать что-то вроде этого:

public void onLongPress(View view, /*whatever else...*/) {
    startActionMode(new ImageActionMode(view));
}
person Jake Wharton    schedule 11.02.2012
comment
Ваш public boolean onOptionsItemSelected(MenuItem item) { //Do something with viewId as the target } должен быть onActionItemClicked (ActionMode mode, MenuItem item) - person Seth Hikari; 11.02.2012
comment
Из коробки ничего не предусмотрено? Это странно. - person JaydeepW; 04.12.2013

Потратив на это некоторое время, я реализовал его и успешно работает. По ссылке ниже я дал правильный код, а также объяснение.

https://stackoverflow.com/a/20369954/452487

person JaydeepW    schedule 04.12.2013