Удаление старого fragmentа из диспетчера fragmentов

Я пытаюсь узнать, как использовать Fragment s в android. Я пытаюсь удалить старый fragment когда новый fragment вызывает в android.

Вам нужно найти ссылку на существующий fragment и удалить этот fragment, используя приведенный ниже код. Вам нужно добавить / зафиксировать fragment, используя один тег ex. “TAG_FRAGMENT”.

 Fragment fragment = getSupportFragmentManager().findFragmentByTag(TAG_FRAGMENT); if(fragment != null) getSupportFragmentManager().beginTransaction().remove(fragment).commit(); 

Вот и все.

Если вы хотите заменить fragment на другой, вы должны добавить их динамически, в первую очередь. Фрагменты, жестко закодированные в XML, не могут быть заменены.

 // Create new fragment and transaction Fragment newFragment = new ExampleFragment(); FragmentTransaction transaction = getFragmentManager().beginTransaction(); // Replace whatever is in the fragment_container view with this fragment, // and add the transaction to the back stack transaction.replace(R.id.fragment_container, newFragment); transaction.addToBackStack(null); // Commit the transaction transaction.commit(); 

См. Это сообщение: Замена fragmentа другим fragmentом внутри группы действий

Refer1: Заменить fragment программно

У меня была такая же проблема, чтобы удалить старые fragmentы. Я закончил расчищать макет, содержащий fragmentы.

 LinearLayout layout = (LinearLayout) a.findViewById(R.id.layoutDeviceList); layout.removeAllViewsInLayout(); FragmentTransaction ft = getFragmentManager().beginTransaction(); ... 

Я не знаю, создает ли это утечки, но это работает для меня.

Вероятно, вы экземпляр старого fragmentа держит ссылку. См. Эту интересную статью Утечка памяти в Android – выявление, лечение и предотrotation

Если вы используете addToBackStack, это позволяет ссылаться на fragment экземпляра, избегая сборщика мусора стереть экземпляр. Экземпляр остается в списке fragmentов в менеджере fragmentов. Вы можете просмотреть список

ArrayList fragmentList = fragmentManager.getFragments();

Следующий код не является лучшим решением (потому что не удалять старый fragment, чтобы избежать утечек памяти), но удаляет старый fragment из списка fragmentов fragmentа

 int index = fragmentManager.getFragments().indexOf(oldFragment); fragmentManager.getFragments().set(index, null); 

Вы не можете удалить запись в arrayList, потому что, по общему мнению, FragmentManager работает с индексом ArrayList, чтобы получить fragment.

Обычно я использую этот код для работы с fragmentManager

 public void replaceFragment(Fragment fragment, Bundle bundle) { if (bundle != null) fragment.setArguments(bundle); FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); Fragment oldFragment = fragmentManager.findFragmentByTag(fragment.getClass().getName()); //if oldFragment already exits in fragmentManager use it if (oldFragment != null) { fragment = oldFragment; } fragmentTransaction.replace(R.id.frame_content_main, fragment, fragment.getClass().getName()); fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); fragmentTransaction.commit(); } 

Я была такая же проблема. Я придумал простое решение. Используйте fragment .replace вместо fragmentа .add . Замена fragmentа выполняется так же, как добавление fragmentа, а затем удаление его вручную.

 getFragmentManager().beginTransaction().replace(fragment).commit(); 

вместо

 getFragmentManager().beginTransaction().add(fragment).commit(); 
  • Начать операцию из fragmentа
  • Фрагмент onCreateView и onActivityCreated вызывается дважды
  • Как добавить функцию «Назад» в WebView внутри fragmentа?
  • Как получить нажатие кнопки в fragmentе хоста из fragmentа диалога
  • Как установить ширину и высоту DialogFragment?
  • Отображать fragment просмотра в fragmentе
  • ListFragment не принимает мой макет
  • Неверный способ обработки fragmentации при изменении ориентации
  • Отдельный задний стек для каждой вкладки на Android с помощью fragmentов
  • Как реализовать onBackPressed () & intents в fragmentе?
  • Как получить существующие fragmentы при использовании FragmentPagerAdapter
  • Interesting Posts

    Пользовательский путь для user.config

    Ноутбук не заряжает старый или новый аккумулятор старыми и новыми адаптерами переменного тока

    WIndows Vista для обновления совместимости с драйверами устройств Windows 10

    Каково происхождение света на жестком диске?

    Стандартным клавишам F * требуется удерживать клавишу Fn на Compaq CQ62

    Как я могу измерить время процессора и время настенных часов на Linux / Windows?

    union ‘punning’ structs w / “common initial sequence”: Почему C (99+), но не C ++, предусматривает «видимое объявление типа объединения»?

    Я не могу открывать / пинговать любые антивирусные сайты

    Как можно приобрести / получить Microsoft DVD / CD-носители, если у вас есть только версия для загрузки MSDNAA

    Почему intellisense и предложение кода перестают работать, когда Visual Studio открыта?

    Путь NSURL против absoluteString

    Ток состояния CSRF не соответствует одному предоставленному FB PHP SDK 3.1.1 Oauth 2.0

    Преимущества SQL Server 2008 над SQL Server 2005?

    Можно ли использовать строку в качестве объекта блокировки?

    Android – способ отображения текстового текста в TextView?

    Давайте будем гением компьютера.