Программно удаляет ViewPager, когда (или как я могу убедиться) что фрагменты уничтожены?
Предварительно выполнив поиск по этой проблеме, я могу найти множество обсуждений, касающихся динамического добавления и удаления выбранныхFragment
сViewPager
, Однако меня здесь действительно беспокоит то, как я могу программно удалить весьViewPager
& APOS; & Чисто APOS; от его содержанияViewGroup
, когда этоViewPager
был использован для отображенияFragment
черезFragmentPagerAdapter
и убедитесь, что содержащиесяFragment
s уничтожены должным образом.
Чтобы еще больше расширить этот вопрос, у меня есть двухпанельный макет с альбомной ориентацией, в котором делается выборка из списка внутриFragment
на левой стороне, и выбранный контент затем помещается справа вFrameLayout
, Ключевым моментом является то, что содержание может быть или не быть разбито на страницы. Поэтому содержимое должно отображаться в видеViewPager
формат, или если он не разбит на страницы, то он должен быть представлен однимFragment
непосредственно.
Чтобы показать одинFragment
Я просто выполняюFragmentTransaction
как обычно, чтобы разместитьFragment
вFrameLayout
контейнер. Если, с другой стороны, это содержимое, которое нужно разбить на страницы, то вместо этого я создаюViewPager
и добавить его в качестве ребенка отFrameLayout
.
Когда мне нужно изменить контент, тогда, если предыдущий контент был автономнымFragment
тогда я могу просто удалить его черезFragmentTransaction
.remove()
, Когда я делаю это,Fragment
проходит черезonPause()
... onDestroy()
цикл, как и ожидалось. Если предыдущий контент былViewPager
затем я удаляю его изFrameLayout
с помощью.removeAllViews()
, Здесь я подхожу к проблеме: я не вижу ни одного изonPause()
... onDestroy()
методы, вызываемые в любом изFragment
s, которые были проведены в этомViewPager
черезFragmentPagerAdapter
.
С точки зрения пользователя, приложение работает нормально. После нескольких раундовViewPager
будучи удаленным, я вижу, что GC восстанавливает память. Однако мне не нравится тот факт, что этиFragment
S & APOS; методы конца срока службы не вызываются, поскольку я не могу выполнить какую-либо очистку внутри них, и это просто не кажется «правильным».
Есть ли способ, которым я могу воспользоваться, чтобы удалитьViewPager
& APOS; sFragment
когдаViewPager
может быть оторван от своего родителя? Другими словами, когда я знаю, чтоViewGroup
больше не используется, я бы выполнилFragmentTransaction
где-то (возможно, вFragmentPagerAdapter
) удалить теFragment
s.
Кроме того, я понимаю, что я мог бы просто сохранитьViewPager
справа постоянно и динамически меняйте местамиFragment
внутри. Конечно, просто не имело бы значения, что в определенные моменты он будет занимать только одну страницу. Если это будет лучший путь, я сделаю для этого свой код, но я был бы признателен за мнения.