栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

ViewPager和片段—存储片段状态的正确方法是什么?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ViewPager和片段—存储片段状态的正确方法是什么?

FragmentPagerAdapter
增加一个片段到FragmentManager,它使用基于特定位置,该片段将被置于一个特殊的标记。
FragmentPagerAdapter.getItem(intposition)
仅在该位置的片段不存在时才调用。旋转后,Android将注意到它已经为该特定位置创建/保存了一个片段,因此它仅尝试使用进行重新连接
FragmentManager.findFragmentByTag()
,而不是创建一个新片段。使用时,所有这些都是免费的,这
FragmentPagerAdapter
就是为什么通常在方法中包含片段初始化代码的原因
getItem(int)

即使我们不使用a

FragmentPagerAdapter
,也不是每次在中创建一个新片段都是一个好主意
Activity.onCreate(Bundle)
。如您所知,将片段添加到FragmentManager时,将在旋转后为您重新创建它,而无需再次添加。这样做是处理片段时出错的常见原因。

使用片段的常用方法是:

protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    ...    CustomFragment fragment;    if (savedInstanceState != null) {        fragment = (CustomFragment) getSupportFragmentManager().findFragmentByTag("customtag");    } else {        fragment = new CustomFragment();        getSupportFragmentManager().beginTransaction().add(R.id.container, fragment, "customtag").commit();     }    ...}

当使用时

FragmentPagerAdapter
,我们将片段管理交给适配器,而不必执行上述步骤。默认情况下,它只会在当前位置的前后预先加载一个Fragment(尽管除非使用,否则它不会销毁它们
FragmentStatePagerAdapter
)。这由ViewPager.setOffscreenPageLimit(int)控制。因此,不能保证在适配器外部的片段上直接调用方法是有效的,因为它们甚至可能没有生命。

长话短说,您使用的解决方案

putFragment
可以随后获得参考,这并不是那么疯狂,也与普通使用片段的方式不同(上图)。否则很难获得参考,因为该片段是由适配器而不是您本人添加的。只要确保它
offscreenPageLimit
足够高,就可以始终加载所需的片段,因为您依赖于它的存在。这绕过了ViewPager的延迟加载功能,但似乎正是您对应用程序所期望的。

另一种方法是

FragmentPageAdapter.instantiateItem(View,int)
在返回之前,重写并保存对从超级调用返回的片段的引用(它具有找到该片段(如果已经存在)的逻辑)。

要获得更完整的图片,请查看FragmentPagerAdapter(短)和ViewPager(长)的某些来源。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/391247.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号