У меня есть объект, где текст циклически отображает сообщения о состоянии. Когда сообщения изменяются, я хочу, чтобы событие щелчка объекта изменилось, чтобы перенести вас в действие, к которому относится сообщение.
Итак, у меня есть, TextView mTitleView
и я назначаю событие, как это.
public void setOnTitleClickListener(OnClickListener listener) {
mTitleView.setOnClickListener(listener);
}
Как мне удалить это событие? Есть некоторые сообщения о состоянии, которые не имеют активной области, поэтому я хотел бы отключить событие click. Я также хотел бы иметь возможность циклически проходить через эти события щелчка и правильно их утилизировать, но я не уверен в лучшей практике.
a better design
, подразумеваете ли вы последствия для производительности или просто говорите, что это немного неприятно?Обратите внимание, что если представление не активируется (например, TextView), настройка
setOnClickListener(null)
будет означать, что представление кликабельно. Используйте,mMyView.setClickable(false)
если вы не хотите, чтобы ваш вид был кликабельным. Например, если вы используете для фона оттенок xml, который показывает разные цвета для разных состояний, если ваш вид по-прежнему кликабелен, пользователи могут щелкнуть по нему, и появится другой цвет фона, который может выглядеть странно.источник
Возможно
setOnClickListener(null)
?источник
Настройка
setOnClickListener(null)
- это хорошая идея удалить прослушиватель щелчков во время выполнения.А также кто-то прокомментировал, что звонок
View.hasOnClickListeners()
после этого вернетсяtrue
, НЕТ мой друг.Вот реализация
hasOnClickListeners()
взята изandroid.view.View
классаСлава Богу. Это проверяет
null
.Так что все безопасно. Наслаждаться :-)
источник
Приведенные выше ответы кажутся несостоятельными и ненадежными. Я попытался сделать это с помощью ImageView в простом относительном макете, и он не отключил событие onClick.
То, что работало для меня, использовало setEnabled.
Затем вы можете проверить, включен ли вид с помощью:
Другой вариант - использовать setContentDescription (String string) и String getContentDescription () для определения состояния представления.
источник
Просто поставь, это сработало для меня
источник
источник
Просто повторная инициализация элемента, как показано ниже, сделает свое дело. Было бы удалить onclick, onlonglick, onitemclick, onitemlongclick на основе элемента
mTitleView = findViewById (R.id.mTitleView);
источник