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

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

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

【问题讨论】:

标签: android


【解决方案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,具体取决于您要使用的片段变体。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-05
  • 2014-11-04
  • 2019-01-04
  • 2022-11-20
  • 1970-01-01
  • 1970-01-01
  • 2021-09-23
相关资源
最近更新 更多