Android: обнаружение закрытия закусочной или истечения времени ожидания в поведении макета координатора

Я хочу изменить положение кнопки плавающего действия в соответствии с появлением и исчезновением некоторых закусочных. Это нормально, когда закусочные перестают работать сами по себе, но это не работает с закусочными, которые закрываются вручную. Я хочу установить позицию в onDependentViewRemoved в последнем случае, однако из-за времени отключения закусочных это вызывает некоторые проблемы, поскольку вызываются как onDependentViewChanged, так и onDependentViewRemoved. Поэтому я хочу каким-то образом определить в onDependentViewChanged или onDependentViewRemoved, была ли данная закусочная закрыта или истекло время ожидания. Настройка представления панели закусок на плавающую кнопку действия невозможна, так как эти панели закусок могут отображаться в нескольких фрагментах, и не все из них имеют плавающие кнопки действий. Интересно, знает ли кто-нибудь, возможно ли такое обнаружение события/состояния в поведении плавающей кнопки действия?

Вот что у меня сейчас:

@Override
    public boolean onDependentViewChanged(CoordinatorLayout parent, View child, View dependency) {
        if ((child instanceof FloatingActionMenu ||
                child instanceof FloatingActionButton) &&
                (dependency instanceof Snackbar.SnackbarLayout ||
                        dependency instanceof AHBottomNavigation)) {
            this.updateTranslation(parent, child, dependency);
        }

        return false;
    }

    @Override
    public void onDependentViewRemoved(CoordinatorLayout parent, View child, View dependency) {
        if ((child instanceof FloatingActionMenu ||
                child instanceof FloatingActionButton) &&
                dependency instanceof Snackbar.SnackbarLayout) {

            this.updateTranslation(parent, child, dependency);
        }
    }

Однако, как я уже сказал, позиции перепутаны или даже иногда приложение падает, когда вызываются оба метода (когда время ожидания закусочной истекает). Кто-нибудь может мне помочь?


person hildegard    schedule 13.09.2016    source источник


Ответы (1)


По умолчанию FloatingActionButton реагирует на ваш запрос. Попробуйте изучить android.support.design.widget.FloatingActionButton.Behavior и посмотрите, почему FloatingActionButton реагирует на Snackbar.

Из быстрого просмотра исходного кода вы должны переопределить:

Вы могли видеть, что все эти функции вызывают:

private void updateFabTranslationForSnackbar(CoordinatorLayout parent, final FloatingActionButton fab, boolean animationAllowed)

Скопируйте код из этой функции, и он должен работать.

person R. Zagórski    schedule 13.09.2016