Tre*_*vor 5 android android-fragments android-viewpager
事先搜索过这个问题,我可以找到很多关于Fragment从a中动态添加和删除所选s的讨论ViewPager.然而,我真正关心的是如何以编程方式ViewPager从包含中删除整个'干净利落' ViewGroup,当ViewPager用于Fragment通过a 显示s时FragmentPagerAdapter,确保包含的Fragments被正确销毁.
为了进一步扩展这个问题,我有一个横向双窗格布局,其中从Fragment左侧的列表中进行选择,然后选择的内容放在a的右侧FrameLayout.关键是内容可能会或可能不会被分页.因此,内容必须以ViewPager格式显示,或者如果没有分页,则应Fragment直接用单个表示.
为了显示单个Fragment,我只需FragmentTransaction像往常一样执行以便将其Fragment放入FrameLayout容器中.另一方面,如果要显示的是分页内容,那么我创建一个ViewPager并将其添加为FrameLayout.
当我需要更改内容时,如果以前的内容是独立的,Fragment那么我可以直接删除它FragmentTransaction .remove().当我这样做时,按预期Fragment进行onPause()... onDestroy()循环.如果之前的内容是a,ViewPager那么我将其从FrameLayout使用中删除.removeAllViews().在这里,我来了问题:我看不到任何的onPause()... onDestroy()方法被称为在任何的Fragment举行之内,且s ViewPager通过FragmentPagerAdapter.
从用户的角度来看,应用程序运行正常.经过几轮ViewPager被移除后,我可以看到GC回收内存.但是,我不喜欢这样一个事实:那些Fragment生命方式的终结方法没有被调用,因为我不能在它们内部做任何清理,而且它似乎并不"正确".
有没有我可以以勾去掉进入一个方法ViewPager的Fragment当S ViewPager从其母体分离,也许?换句话说,当我知道ViewGroup不再使用它时,我会在FragmentTransaction某个地方(可能在FragmentPagerAdapter那里)执行以删除那些Fragments.
或者,我意识到我可以ViewPager永久保持在右侧,并动态交换其中的Fragments.当然,在某些时候它只能容纳一页并不重要.如果这是一个更好的方式,那么我将重构我的代码来做到这一点,但我会欣赏意见.
Com*_*are 12
但是,我不喜欢这样一个事实:那些片段的生命终结方法没有被调用,因为我不能在它们内部进行任何清理,而且它似乎并不"正确".
当活动被破坏时,它们应该被清除,如果这对你来说不是太晚(例如,堆问题).
换句话说,当我知道不再使用ViewGroup时,我会在某处(可能在FragmentPagerAdapter中)执行FragmentTransactions以删除那些片段.
您没有执行事务以将片段放在那里.因此,您无法轻松执行事务以删除片段.如果切换到FragmentStatePagerAdapter并调用setAdapter(null),则应该通过阅读源代码来破坏寻呼机中的所有现有片段.FragmentPagerAdapter从来没有使用remove(),但FragmentStatePagerAdapter确实从它的destroyItem()方法,并且destroyItem()当提供新的适配器(或null)时,所有现存的片段都被销毁setAdapter().
| 归档时间: |
|
| 查看次数: |
4907 次 |
| 最近记录: |