Странное поведение при замене фрагментов в Android

Я работаю в течение нескольких месяцев в приложении. Версия, загруженная в плеймаркет, работает нормально. В последнее время, делая некоторые улучшения, все приложение стало работать очень странно.

Если вы переключаетесь между фрагментами, через некоторое время он не раздувает должным образом фрагменты, помещая всегда содержимое первого. Итак, если вы переключаете фрагмент, панель действий меняется, но содержимое всегда остается одним и тем же (и вы не можете с ним взаимодействовать).

Вот краткое видео об ошибке https://streamable.com/9exa.

Я схожу с ума, потому что нет ни журнала, ни следов.

Я использую обычный способ переключения фрагментов, и самое интересное, что вначале все работает нормально:

Fragment fragment = getSelectedFragment(index); // returns the desired fragment
FragmentManager fragmentManager = getFragmentManager();

//Pop backstack
for(int i = 0; i < fragmentManager.getBackStackEntryCount(); ++i) {
    fragmentManager.popBackStack();
}

fragmentManager.beginTransaction()
               .replace(R.id.container, fragment)
               .addToBackStack(null)
               .commit();

Кто-нибудь знает, что здесь может происходить? Спасибо!

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

решено: как я объясняю в своем ответе, я обнаружил, что это проблема, связанная с SwipeRefreshLayout. Дополнительную информацию об этой проблеме можно найти по адресу при переключении фрагмента с помощью SwipeRefreshLayout при обновлении фрагмент зависает, но на самом деле все еще работает


person Adrian Latorre    schedule 05.08.2015    source источник


Ответы (3)


Хорошо, я узнал проблему.

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

Его удаление или отключение setEnabled(false) решает все проблемы.

Я надеюсь, что это поможет всем, у кого есть такая же проблема!

Другой поток в SO, который относится к той же проблеме: при переключении фрагмента с SwipeRefreshLayout во время обновления фрагмент зависает, но на самом деле все еще работает

person Adrian Latorre    schedule 06.08.2015

Какие фрагменты вы используете?

У меня было какое-то странное поведение с использованием фрагментов фреймворка, и я переключился на V4, и все заработало нормально.

person alorma    schedule 05.08.2015
comment
Я только что заменил все фрагменты на v4, но, к сожалению, проблема не устранена. - person Adrian Latorre; 05.08.2015

Пожалуйста, проверьте эту ссылку: FragmentManager popBackStack не удаляет фрагмент

Я использую следующий код в своей деятельности для переключения между фрагментами, и он работает нормально. minSdkVersion моего приложения — 15.

    private void setFragment(Fragment fragment) {
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction =
            fragmentManager.beginTransaction();
        fragmentTransaction.replace(R.id.container, fragment);
        fragmentTransaction.commit();
    }
person shivam gupta    schedule 05.08.2015