android вид с видом.GONE по-прежнему получает onTouch и onClick
Это сбивает меня с толку:
насколько я прочитал, вид с setVisibility (View.Ушел); не должен получать больше любого прикосновения или нажмите кнопку события.
Мой макет состоит из двух частей, которые будут видны или исчезли, так что только один из них виден и может использоваться одновременно, но вид.Ушли не делает трюк.
Я не вижу пропавшего вида, как ожидалось, но он все еще реагирует на onClick (и потребляет событие, которое должен получить другой вид).
вы можете помочь я?
может быть, интерес:
Когда я начинаю свой проект, один вид исчезает,другой виден. На этот раз он будет работать так, как ожидалось (исчезнувший вид в основном игнорируется), но после установки представления.Пройдя через код, он перестанет работать.
9 ответов:
может быть, вы используете анимацию, чтобы показать/скрыть представления? Я получаю это поведение, когда я использую анимации, которые имеют android:fillEnabled= "true" android:fillAfter= " true" Не понимаю этого и кажется ошибкой - если я использую анимацию без fillEnabled/fillAfter, все работает так, как ожидалось...
Если вы устанавливаете
setVisibility(View.GONE)после некоторой анимации (исчезают, например), а затем попробуйте очистить анимацию сclearAnimation(). Вот что мне помогло.
попробуйте установить свойство clickable в false с помощью setClickable(false) после setVisibility (View.Ушел)
Да
mview.clearAnimation()есть некоторые issuses ноamination.setFillAfter(false);иmview.setClickable(false);работает идеально .
то, что я ожидаю, происходит, это то, что вы делаете вид невидимым, но дети по-прежнему реагируют на щелчки (т. е. ваш вид-это ViewGroup). Вы могли бы сделать что-то вроде:
private void hideTheChildren(View v){ if(v instanceof ViewGroup) { int count = ((ViewGroup)v).getChildCount(); for(int k = 0 ; k < count ; k++) { hideTheChildren(((ViewGroup)v).getChildAt(k)); } v.setVisibility(View.GONE); } else { v.setClickable(false); v.setVisibility(View.GONE); } }конечно, вы также должны сделать наоборот
private void showTheChildren(View v){ if(v instanceof ViewGroup) { int count = ((ViewGroup)v).getChildCount(); for(int k = 0 ; k < count ; k++) { showTheChildren(((ViewGroup)v).getChildAt(k)); } v.setVisibility(View.VISIBLE); } else { v.setClickable(true); v.setVisibility(View.VISIBLE); } }это работало для меня в прошлом. В настоящее время я не знаю лучшего способа сделать это.
Я бы разместил это как комментарий, но, к сожалению, я не смог опубликовать комментарий. Как это может быть возможным решением для вас, я выкладываю его таким образом:
как вы пишете "onClick" я предполагаю, что вы используете
onClickатрибут в XML-макете. Попробуйте установитьOnClickListenerСsetOnClickListenerвместо . Может быть, это поможет...
для тех, кто сделал ответы выше и все еще не решил свои проблемы, я рекомендую удалить представление из родительского представления. Если вам нужно снова отобразить представление, просто сделайте копию и добавьте ее в родительское представление.
Это может показаться излишним, но я скрывал / показывал целые группы представлений в вашем случае это может быть кнопка, textview или изображение, это решение все равно будет работать.
Comments