Удалить прослушиватель onclick

У меня есть объект, где текст циклически отображает сообщения о состоянии. Когда сообщения меняются, я хочу, чтобы событие щелчка объекта изменилось, чтобы перейти к активности, к которой относится сообщение.

Итак, у меня есть TextView mTitleView, и я назначаю событие, подобное этому.

public void setOnTitleClickListener(OnClickListener listener) {
    mTitleView.setOnClickListener(listener);
}

Как удалить событие click? Есть некоторые сообщения о статусе, у которых нет области действия, поэтому я хочу отключить событие click. Я также хотел бы иметь возможность циклически перемещаться по этим событиям щелчка и правильно распоряжаться ими, но я не уверен в лучшей практике.

Ответ 1

mTitleView.setOnClickListener(null) должен сделать трюк.

Лучшим вариантом может быть проверка статуса в OnClickListener, а затем определение того, должен ли этот клик делать что-либо против добавления и очистки кликов.

Ответ 2

Обратите внимание, что если представление не кликабельно (например, TextView), установка setOnClickListener(null) будет означать, что просмотр можно щелкнуть. Используйте mMyView.setClickable(false), если вы не хотите, чтобы ваше представление было доступно для просмотра. Например, если вы используете xml drawable для фона, который показывает разные цвета для разных состояний, если ваше представление по-прежнему доступно для клика, пользователи могут щелкнуть по нему, и будет отображаться другой цвет фона, что может показаться странным.

Ответ 3

Возможно setOnClickListener(null)?

Ответ 4

Настройка setOnClickListener(null) - это хорошая идея удалить прослушиватель кликов во время выполнения.

А также кто-то прокомментировал, что вызов View.hasOnClickListeners() после этого вернет мне true, NO мой друг.

Вот реализация hasOnClickListeners(), взятая из android.view.View class

 public boolean hasOnClickListeners() {
        ListenerInfo li = mListenerInfo;
        return (li != null && li.mOnClickListener != null);
    }

Слава Богу. Он проверяет null.

Итак, все в безопасности. Наслаждайтесь: -)

Ответ 5

Просто положил, это сработало для меня

itemView.setOnClickListener(null);

Ответ 6

Вышеприведенные ответы кажутся лёгкими и ненадежными. Я попытался сделать это с помощью ImageView в простой относительной компоновке и не отключил событие onClick.

Что для меня работало с помощью setEnabled.

ImageView v = (ImageView)findViewByID(R.id.layoutV);
v.setEnabled(false);

Затем вы можете проверить, включен ли режим просмотра:

boolean ImageView.isEnabled();

Другой вариант - использовать setContentDescription (строка строки) и String getContentDescription(), чтобы определить статус представления.

Ответ 7

    /**
 * Remove an onclick listener
 *
 * @param view
 * @author [email protected]
 * @website https://github.com/androidmalin
 * @data 2016-05-16
 */
public static void unBingListener(View view) {
    if (view != null) {
        try {
            if (view.hasOnClickListeners()) {
                view.setOnClickListener(null);

            }

            if (view.getOnFocusChangeListener() != null) {
                view.setOnFocusChangeListener(null);

            }

            if (view instanceof ViewGroup && !(view instanceof AdapterView)) {
                ViewGroup viewGroup = (ViewGroup) view;
                int viewGroupChildCount = viewGroup.getChildCount();
                for (int i = 0; i < viewGroupChildCount; i++) {
                    unBingListener(viewGroup.getChildAt(i));
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

Ответ 8

Просто повторная инициализация элемента, как показано ниже, сделает свое дело. Было бы удалить onclick, onlonglick, onitemclick, onitemlongclick на основе элемента

mTitleView = findViewById (R.id.mTitleView);