我正在编写一个扩展Fragment的类,我想在XML文件中使用它。对于我的类,我有一个构造函数,它接受一个参数,指定片段应如何布局其UI。
我想在XML中使用我的类,但是也想指定这个布局参数,但是可以将它包含在XML中吗?
答案 0 :(得分:5)
片段需要具有无参数构造函数。这是因为片段实例可以多次创建。引用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
,具体取决于您要使用的片段的哪个版本。