2014-11-24 97 views
4

使用工厂构建碎片的目的是什么? Android Studio提供了一些样板代码生成功能,并在创建片段时提供了工厂方法。片段和工厂方法

那么这是什么目的呢?收益是多少?

回答

3

使用静态工厂方法不只是片段,我用它来创建意图,适配器和其他类也是如此。通过这种方法,您只需控制对象创建。

其中一个很好的优点是你只需通过封装捆绑键来增加内聚力。

class FragmentFoo extends Fragment{ 
} 

当你想束从外部

// Activity Foo 
Bundle bundle = new Bundle(); 
bundle.putString("name","Foo"); 
Fragment fragment = new FragmentFoo(); 
fragment.setArgs(bundle); 

发送到这个片段提取这个名字,你需要使用“名”在片段密钥为好,如果你把它当作硬编码,你可能会有一些错误,错别字。所以你可以使用一个常量来确保你不会输入错字。但在这种情况下,你需要把它放在可以看到它的地方。有些人创建了另一个班级,以便保留所有非常难看和难以维护的内容,有些将关键点放在片段中,并将其公开并在任何地方使用,

通过静态工厂方法,您可以将所有内容片段并且不需要公开。谁需要使用这个片段就会清楚它的需求,也不需要知道密钥是什么。只需发送所需的参数就足够了。

class FragmentFoo extends Fragment{ 

    private static final String KEY_NAME = "name"; 

    private String name; 

    public static Fragment newInstance(String name){ 
     Bundle bundle = new Bundle(); 
     bundle.putString(KEY_NAME, "name"); 
     Fragment fragment = new FragmentFoo(); 
     fragment.setArgs(bundle); 

     return fragment; 
    } 
} 
3

静态工厂方法允许我们初始化和设置新的Fragment,而无需调用其构造函数和其他setter方法。为碎片提供静态工厂方法是一种很好的做法,因为它封装并提取了从客户端设置对象所需的步骤。

http://www.androiddesignpatterns.com/2012/05/using-newinstance-to-instantiate.html

+0

我想这是有道理的。如果要使用相同的参数而不是默认值创建Fragment,但由于Fragments的工作方式(Bundles通过配置更改保留数据),因此无法使用参数化的构造函数。 – EpicPandaForce 2014-11-24 09:15:24

0

片段必须有一个没有参数的构造函数。这是因为Android会调用默认的构造函数来重新创建片段。如果你没有传入参数,那么你不应该需要构造函数或静态工厂方法(AKA,虚拟构造函数)。