是否可以在 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 中使用 MyLandscapeFragment
或 MyPortraitFragment
,具体取决于您要使用的片段变体。
【讨论】:
谢谢锡安。除了片段之外,我认为不可能将参数传递给 XML 中任何类的构造函数?View
的子类可以使用AttributeSet
。见自定义视图示例:developer.android.com/resources/samples/ApiDemos/src/com/…以上是关于是否可以在 XML 中传递构造函数参数?的主要内容,如果未能解决你的问题,请参考以下文章
Laravel:是不是可以在组件构造函数中使用 Spread 运算符?
GroovyGroovy 方法调用 ( Groovy 构造函数中为成员赋值 | Groovy 函数的参数传递与键值对参数 | 完整代码示例 )