This question already has answers here:
Best practice for instantiating a new Android Fragment
(14个回答)
7年前关闭。
我正在用代码审查其他人对ViewPager的实现。他有一个属于每个 View 的 fragment 类数组。在getItem(int i)内部,他将编写MyFragment.newInstance(),但我认为没有问题。但是,在查看ViewPager的Google文档时,他们在示例中使用Fragment.instantiate。除了设置类信息的方式之外,使用实例化而不是调用newInstance(arg)或空构造函数有任何设计优势吗?
链接:
Fragment.instantiate
这就是框架实例化布局XML中指定的 fragment 的方式。
在代码中,最好使用
代码
(14个回答)
7年前关闭。
我正在用代码审查其他人对ViewPager的实现。他有一个属于每个 View 的 fragment 类数组。在getItem(int i)内部,他将编写MyFragment.newInstance(),但我认为没有问题。但是,在查看ViewPager的Google文档时,他们在示例中使用Fragment.instantiate。除了设置类信息的方式之外,使用实例化而不是调用newInstance(arg)或空构造函数有任何设计优势吗?
链接:
Fragment.instantiate
最佳答案
instantiate()
允许您按名称指定 fragment ,而无需对该类进行编译时静态解析。
当 fragment 名称来自某个运行时源(例如二进制XML)时,这很有用:
<fragment class="com.example.FragmentClass" ...
这就是框架实例化布局XML中指定的 fragment 的方式。
在代码中,最好使用
newInstance()
或空构造函数来进行编译时静态类型检查。代码
instantiate()
does under the hood与使用newInstance()
/空构造函数实例化时发生的变化并没有太大的区别,因此在性能上不太可能出现显着差异。关于java - 当Fragment.instantiate优于MyFragment.newInstance或new MyFragment()时,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21738570/
10-13 05:30