Быстрая замена фрагментов приводит к тому, что странный снимок экрана предыдущего фрагмента сохраняется и переносится вперед.

Я использую HomeActivity, которая динамически заменяет фрагменты и динамически добавляет их в макет фрейма контента по мере того, как пользователь выбирает элементы из ящика. Для каждого фрагмента он загружает фид из сети, который затем рендерит. Вот код, который я использую для переключателя -

    public void loadFragment(Fragment frag, String tag) {
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.replace(R.id.content_fragment, frag, tag);
        try {
            fragmentTransaction.commit();
        } catch (IllegalStateException e) {
            logger.error(TAG, "Failed to commit fragment transaction... ", e);
        }
    }

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

Разделить слои с помощью скальпеля Джейка Уортона

Теперь, если вы заметили, что в верхней части этого стека есть фид из нового фрагмента, и в нем есть слои, как и должно быть, но в нижней части этого стека есть то, что кажется скриншотом предыдущего фрагмента, и этот, казалось бы, снимок экрана / частичная отрисовка в корне представление по z-индексу выше, чем новый фид по какой-то причине и затмевает его. Он также не взаимодействует, и, что интересно, я могу прокручивать новую ленту, которая находится по z-индексу ниже (хотя это самый верхний слой на картинке выше) даже с наложением.

Я пытался пройти иерархию представлений из корневого представления и распечатать все, и мне не удалось найти текст элементов скриншота (поэтому я думаю, что это изображение или какая-то оптимизация, выполненная третьей стороной Мы также используем SwipeToRefresh). Я действительно смущен относительно того, что это и как я могу избавиться от этого. Этого не произойдет, если я медленно переключаю фрагменты и позволяю им загружаться. Любые подсказки?


person Rickster    schedule 13.06.2015    source источник
comment
Это ошибка с библиотекой поддержки. Очистка любой ожидающей анимации в ondestroy / ondestroyview фрагмента должна это исправить.   -  person Rickster    schedule 10.07.2015