Устройства Samsung относятся к FragmentTransactions иначе, чем другие устройства?

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

getFragmentManager().beginTransaction().replace(R.id.fragementContainer, new SomeFragment()).commit();

Это прекрасно работает на моем Nexus 4, Nexus 5, Nexus 7 2012, Nexus 7 2013, Moto G 1st gen и т. Д. В основном все, кроме устройств Samsung (SGS5, SGS6). На этих устройствах иногда (редко, но не достаточно редко) кажется, что вызов replace() неверно истолковывается как вызов add(), и новый фрагмент появляется поверх предыдущего.

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

2 ответа

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

Это вполне может быть вызвано некоторыми "оптимизациями" Samsung. Единственное, что я могу посоветовать, это использовать remove() а также add() вместо replace(), Реализация в рамках FragmentTransaction отличается, поэтому есть вероятность, что это будет вести себя по-другому.

Вы можете легко удалить фрагмент, потому что он имеет тот же идентификатор, что и контейнер. Попробуй это:

FragmentTransaction transaction = fragmentManager.beginTransaction();

Fragment oldFragment = fragmentManager.findFragmentById(R.id.container);
if (oldFragment != null) transaction.remove(oldFragment);

transaction.add(R.id.container, new Fragment(), "tag").commit();
Другие вопросы по тегам