android вид с видом.GONE по-прежнему получает onTouch и onClick



Это сбивает меня с толку:



насколько я прочитал, вид с setVisibility (View.Ушел); не должен получать больше любого прикосновения или нажмите кнопку события.
Мой макет состоит из двух частей, которые будут видны или исчезли, так что только один из них виден и может использоваться одновременно, но вид.Ушли не делает трюк.
Я не вижу пропавшего вида, как ожидалось, но он все еще реагирует на onClick (и потребляет событие, которое должен получить другой вид).



вы можете помочь я?



может быть, интерес:
Когда я начинаю свой проект, один вид исчезает,другой виден. На этот раз он будет работать так, как ожидалось (исчезнувший вид в основном игнорируется), но после установки представления.Пройдя через код, он перестанет работать.

453   9  

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 или изображение, это решение все равно будет работать.

попробуйте добавить .clearAnimation () в переопределении onAnimationEnd.

Если есть анимация в представлении, вы должны вызвать view.clearAnimation.

Comments

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