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



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



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



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


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

1069   7  

7 ответов:

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

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

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

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

задание setOnClickListener(null) это хорошая идея, чтобы удалить click listener во время выполнения.

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

вот реализация hasOnClickListeners() принято от android.view.View класс

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

слава богу. Он проверяет на null.

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

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

itemView.setOnClickListener(null);

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

то, что действительно работало для меня, использовало setEnabled.

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

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

boolean ImageView.isEnabled();

другой вариант-использовать setContentDescription (String string) и Строка getContentDescription () для определения состояния представления.

    /**
 * 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();
        }

    }
}

Comments

    Ничего не найдено.