是否可以在 XML 中传递构造函数参数?

Posted

技术标签:

【中文标题】是否可以在 XML 中传递构造函数参数?【英文标题】:Is It possible To Pass Constructor Parameters In XML? 【发布时间】:2011-12-04 08:52:33 【问题描述】:

我正在编写一个扩展 Fragment 的类,我想在 XML 文件中使用它。对于我的类,我有一个构造函数,它接受一个参数,该参数指定片段应如何布局其 UI。

我想在 XML 中使用我的类,但也想指定此布局参数,但是否可以将其包含在 XML 中?

【问题讨论】:

有一个类似的问题有一个不错的答案:***.com/questions/8641575/… 【参考方案1】:

片段需要有无参数的构造函数。这是因为可以多次创建片段实例。引用docs:

每个片段都必须有一个空的构造函数,所以它可以是 在恢复其活动状态时实例化。它是强烈的 建议子类不要有其他构造函数 参数,因为这些构造函数不会被调用时 片段被重新实例化;相反,参数可以由 带有 setArguments(Bundle) 的调用者,后来由 Fragment 检索 使用 getArguments()。

不幸的是,您不能在 XML 中使用建议的 setArguments,但可能会使用不同的方法,具体取决于您计划传递给片段的可能参数集。例如,您可以适当地对片段进行子类化:

public class MyPortraitFragment extends MyFragment 
    public MyPortraitFragment() 
        Bundle args = MyFragment.getPortraitArgsBundle();
        setArguments(args);
    


public class MyLandscapeFragment extends MyFragment 
    public MyLandscapeFragment() 
        Bundle args = MyFragment.getLandscapeArgsBundle();
        setArguments(args);
    

然后,您可以在 XML 中使用 MyLandscapeFragmentMyPortraitFragment,具体取决于您要使用的片段变体。

【讨论】:

谢谢锡安。除了片段之外,我认为不可能将参数传递给 XML 中任何类的构造函数? View 的子类可以使用AttributeSet。见自定义视图示例:developer.android.com/resources/samples/ApiDemos/src/com/…

以上是关于是否可以在 XML 中传递构造函数参数?的主要内容,如果未能解决你的问题,请参考以下文章

Oracle PL/SQL 传递行类型作为构造函数参数

如何将 std::map 作为默认构造函数参数传递

Laravel:是不是可以在组件构造函数中使用 Spread 运算符?

Angular如何传递跳过一些[重复]的可选构造函数参数

将参数从php中的数组传递给构造函数[重复]

GroovyGroovy 方法调用 ( Groovy 构造函数中为成员赋值 | Groovy 函数的参数传递与键值对参数 | 完整代码示例 )