Я обновил свое приложение с SDK 26 до SDK 28, и это разрушило навигацию моего приложения. У меня есть центральная вкладка деятельности. На каждой вкладке поток приложения управляется фрагментами. Я реализовал заднее нажатие таким образом, чтобы отображался предыдущий фрагмент текущей вкладки. Код обратной печати:
public void onBackPressed() {
String name = fragmentManager.getBackStackEntryAt(
fragmentManager.getBackStackEntryCount() - 1).getName();
Fragment fragment = fragmentManager.findFragmentByTag(name);
String tag = ((AppFragment) fragment).getPreceddingFragmentTag();
Fragment frag = fragmentManager.findFragmentByTag(tag);
removeFragment(fragment);
replaceFragment(frag, tag);
}
Я передаю тег текущего фрагмента следующему в его конструкторе, который затем выбирается методом getPreceddingFragmentTag()
в приведенном выше коде. Я использую один метод, чтобы показать новые фрагменты на экране, а также удалить их при нажатии назад. Вот код для этого:
private void replaceFragment(Fragment fragment, String tag) {
loadedFragment = (AppFragment) fragment;
fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(mContainerId, fragment, tag);
fragmentTransaction.addToBackStack(tag);
fragmentTransaction.commit();
invalidateOptionsMenu();
}
Я поддерживаю backstack для отслеживания транзакций и получения текущего отображаемого фрагмента, когда пользователь нажимает назад. Метод удаления фрагмента:
private void removeFragment(Fragment fragment) {
fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.remove(fragment);
fragmentTransaction.commit();
}
Мое приложение работает следующим образом: на вкладке открывается фрагмент, содержащий список, который переносит пользователя к следующему фрагменту при щелчке элемента;который также является списком, нажатие на элемент в списке приводит пользователя к фрагменту подробностей элемента.
Вот проблема:
Я перехожу от первого фрагмента к следующему, затем кдетали товара и возвращайся. Он отлично работает в первый раз.
Я нажимаю на другой элемент в списке в первом фрагменте, он отлично показывает следующий фрагмент, я нажимаю на элемент для деталей, а затем нажимаю назад. Вместо того чтобы показать фрагмент, который он должен был показать, он показывает фрагмент, который был показан в предыдущем потоке.
Я испортил дни и ночи на stackoverflow , medium и Документация для разработчиков Google и не нашли решения. Мое приложение отлично работало, SDK 26 и 28 все испортили. Кто-нибудь может помочь?