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

Ker*_*rry 3 android

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

我想在XML中使用我的类,但是也想指定这个布局参数,但是可以将它包含在XML中吗?

Xio*_*ion 5

片段需要具有无参数构造函数.这是因为片段实例可以多次创建.引用文档:

每个片段都必须有一个空构造函数,因此可以在恢复其活动状态时进行实例化.强烈建议子类没有带参数的其他构造函数,因为在重新实例化片段时不会调用这些构造函数.相反,参数可以由调用者使用setArguments(Bundle)提供,稍后由Fragment使用getArguments()检索.

遗憾的是,您无法使用setArgumentsXML中的建议,但可能会采用不同的方式,具体取决于您计划传递给片段的可能参数集.例如,您可以适当地子类化您的片段:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,您将使用MyLandscapeFragmentMyPortraitFragment在XML中,具体取决于您要使用的片段的哪个变体.