使用newInstance()来实例化fragment
来源:互联网 发布:flume写入数据到hdfs 编辑:程序博客网 时间:2024/05/05 18:26
new MyFragment()和MyFragment.newInstance()之间的差别是什么?应该用哪个呢?
好问题。答案就是这篇文章的题目所建议的,这是一种合理的设计。在这种情况下,newInstance()方法是一种“静态工厂方法",让我们在初始化和设置一个新的fragment的时候省去调用它的构造函数和额外的setter方法。为你的Fragment提供静态工厂方法是一种好的做法,因为它封装和抽象了在客户端构造对象所需的步骤。例如,考虑下面的代码:
public class MyFragment extends Fragment { /** * 静态工厂方法需要一个int型的值来初始化fragment的参数, * 然后返回新的fragment到调用者 */ public static MyFragment newInstance(int index) { MyFragment f = new MyFragment(); Bundle args = new Bundle(); args.putInt("index", index); f.setArguments(args); return f; } }
不要让客户端去调用默认的构造函数,然后手动地设置fragment的参数。我们直接为它们提供一个静态工厂方法。这样做比调用默认构造方法好,有两个原因:一个是,它方便别人的调用。另一个是,保证了fragment的构建过程不会出错。通过提供一个静态工厂方法,我们避免了自己犯错--我们再也不用担心不小心忘记初始化fragmnet的参数或者没正确设置参数。
总的来说,虽然两者的区别只在于设计,但是他们之间的差别非常大。因为提供静态工厂方法有向上抽象了一个级别,让代码更容易懂。
译者注:其实提供静态工厂而不是使用默认构造函数或者自己定义一个有参的构造函数还有至关重要一点。fragmnet经常会被销毁重新实例化,Android framework只会调用fragment无参的构造函数。在系统自动实例化fragment的过程中,你没有办法干预。一些需要外部传入的参数来决定的初始化就没有办法完成。使用静态工厂方法,将外部传入的参数可以通过Fragment.setArgument保存在它自己身上,这样我们可以在Fragment.onCreate(...)调用的时候将这些参数取出来。
- 【译】使用newInstance()来实例化fragment
- 使用newInstance()来实例化fragment
- 使用newInstance()来实例化fragment
- 使用newInstance()来实例化fragment
- 使用newInstance()来实例化fragment
- 使用newInstance()来实例化fragment
- 使用newInstance()来实例化fragment 并传递数据
- Android使用newInstance()实例化fragment&setArguments()传递参数
- Android 从源码的角度分析——为什么要用newInstance来实例化Fragment
- Android中利用newInstance()方法实例化fragment
- 创建Fragment使用 构造函数 还是 newInstance()
- newInstance创建Fragment
- Kotlin Fragment NewInstance
- Fragment传参:使用静态工厂方法来创建Fragment的实例
- 正确使用Fragment之创建/传参——newInstance方法(native)
- Fragment简介和使用实例
- Fragment(碎片)的使用实例
- Using newInstance() to Instantiate a Fragment
- 关于用代码实例化对象与xib实例化文件调用方法的不同
- iOS开发之c语言基础-函数指针
- CSS 的overflow:hidden 属性详细解释
- [Servlet]Servlet/JSP Web应用配置
- git 查看远程分支、本地分支、删除本地分支
- 使用newInstance()来实例化fragment
- 编程方法论
- 四、线程池
- Set,List,Map的区别
- jQuery实战-省市级联下拉框
- UINavigationController总结
- iOS中的单例
- c之枚举型与switch的使用
- cheng@ARM结构与编程之day2-ARM寄存器(R0~R15)