Ответ 1
mTitleView.setOnClickListener(null)
должен сделать трюк.
Лучшим вариантом может быть проверка статуса в OnClickListener, а затем определение того, должен ли этот клик делать что-либо против добавления и очистки кликов.
У меня есть объект, где текст циклически отображает сообщения о состоянии. Когда сообщения меняются, я хочу, чтобы событие щелчка объекта изменилось, чтобы перейти к активности, к которой относится сообщение.
Итак, у меня есть TextView mTitleView
, и я назначаю событие, подобное этому.
public void setOnTitleClickListener(OnClickListener listener) {
mTitleView.setOnClickListener(listener);
}
Как удалить событие click? Есть некоторые сообщения о статусе, у которых нет области действия, поэтому я хочу отключить событие click. Я также хотел бы иметь возможность циклически перемещаться по этим событиям щелчка и правильно распоряжаться ими, но я не уверен в лучшей практике.
mTitleView.setOnClickListener(null)
должен сделать трюк.
Лучшим вариантом может быть проверка статуса в OnClickListener, а затем определение того, должен ли этот клик делать что-либо против добавления и очистки кликов.
Обратите внимание, что если представление не кликабельно (например, TextView), установка setOnClickListener(null)
будет означать, что просмотр можно щелкнуть. Используйте mMyView.setClickable(false)
, если вы не хотите, чтобы ваше представление было доступно для просмотра. Например, если вы используете xml drawable для фона, который показывает разные цвета для разных состояний, если ваше представление по-прежнему доступно для клика, пользователи могут щелкнуть по нему, и будет отображаться другой цвет фона, что может показаться странным.
Возможно setOnClickListener(null)
?
Настройка setOnClickListener(null)
- это хорошая идея удалить прослушиватель кликов во время выполнения.
А также кто-то прокомментировал, что вызов View.hasOnClickListeners()
после этого вернет мне true
, NO мой друг.
Вот реализация hasOnClickListeners()
, взятая из android.view.View
class
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 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();
}
}
}
Просто повторная инициализация элемента, как показано ниже, сделает свое дело. Было бы удалить onclick, onlonglick, onitemclick, onitemlongclick на основе элемента
mTitleView = findViewById (R.id.mTitleView);