Гренки не появляются время от времени

У меня есть официальный навигационный ящик в моем приложении. Щелчок по элементам в ящике открывает новые фрагменты в части содержимого экрана. Каждый фрагмент содержит FrameLayout с тем же идентификатором, который используется для отображения крутона.

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

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

Так что это довольно непредсказуемо. Бывают даже случаи, когда на экране вообще не отображается гренок, пока я не переключусь на другой экран и обратно.

Для отображения гренок я использую это в каждом макете Framgnet:

<FrameLayout
    android:id="@+id/crouton_view"
    android:layout_width="match_parent"
    android:layout_height="@dimen/crouton_height"
    android:layout_alignParentTop="true" />

В коде у меня есть класс CroutonBuilder со следующими методами:

public static Crouton getNewLastUpdateCrouton(Activity activity, boolean infinite, String plateNumber) {
    String lastUpdateString = ...;
    Crouton newCrouton = Crouton.makeText(activity, lastUpdateString, CroutonBuilder.getLastUpdate(activity),
                                    R.id.crouton_view);
    if (infinite) {
        newCrouton.setConfiguration(new Configuration.Builder().setDuration(
                                        Configuration.DURATION_INFINITE).build());
    }
    return newCrouton;
}

а затем просто вызовите .show() на возвращенном крутоне. Когда я отлаживаю и выполняю шаг, вызывается метод show(), но иногда просто ничего не отображается.

У вас есть идеи, что я делаю неправильно?


person Marcel Bro    schedule 26.02.2014    source источник
comment
Используете ли вы обходной путь, описанный здесь?   -  person keyboardsurfer    schedule 28.02.2014
comment
Я обнаружил, что Гренки перестали появляться, когда я оставил Фрагмент, в то время как Гренки в данный момент показывались. Звонок Crouton.cancelAllCroutons() в onPause() помог.   -  person Marcel Bro    schedule 28.02.2014


Ответы (1)


Я обнаружил, что Гренки перестали появляться, когда я оставил Фрагмент, в то время как Гренки в данный момент показывались. Звонок Crouton.cancelAllCroutons() в onPause() помог.

person Marcel Bro    schedule 03.07.2014
comment
Это мне очень помогло - я думал, что это проблема многопоточности, но я просто показывал гренки во время перехода фрагмента, и после этого гренки больше не работали. Вызов cancelAllCroutons в onPause моего фрагмента, прежде чем я оставлю фрагмент, исправил это для меня. Спасибо!!! - person DiscDev; 16.05.2015
comment
действительно, он очищает очередь сообщений для добавления и обработки новых объектов Croutons. Устаревшие могут задушить Q. Отличный ответ - person Karan; 08.02.2016