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

时间:2011-10-10 09:13:21

标签: android

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

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

1 个答案:

答案 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中使用MyLandscapeFragmentMyPortraitFragment,具体取决于您要使用的片段的哪个版本。