【问题标题】:DailogFragment - getArguments/setArguments - why passing arguments in a bundle?DailogFragment - getArguments/setArguments - 为什么要在包中传递参数?
【发布时间】:2012-05-06 04:31:36
【问题描述】:

在官方示例http://developer.android.com/reference/android/app/DialogFragment.html#BasicDialog 中,该片段是使用静态工厂方法创建的,该方法将参数包装在 Bundle 中并调用 no-args 构造函数,使用 setArguments(bundle) 传递 args - 所以我的问题是 - 为什么不简单地制作带有这些参数的公共构造函数?使用 getArguments/setArguments 片段的方法的原因是什么 - 也许 Dialog 不能保证每次都重新创建,而是重复使用?如果是这样,那么它什么时候发生? 提前致谢。

【问题讨论】:

    标签: android android-fragments android-dialog android-dialogfragment


    【解决方案1】:

    强制执行无参数,默认构造函数模式允许系统在必要时动态重新创建片段。来自文档:

    Fragment 的所有子类都必须包含一个公共的空构造函数。框架通常会在需要时重新实例化一个片段类,特别是在状态恢复期间,并且需要能够找到这个构造函数来实例化它。如果空构造函数不可用,在状态恢复过程中某些情况下会出现运行时异常。

    “将经常”和“在某些情况下”使其含糊不清。但还不能满足你的好奇心......它是争论!

    【讨论】:

    • 空的公共构造函数可以与参数化的公共构造函数共存。这并没有解释使用静态方法(而不是构造函数)或将参数包装在 Bundle 对象中。
    • @KonradMorawski 你是对的,这听起来很合理。但是 ADT lint 工具会将此类构造函数高亮显示为错误。
    猜你喜欢
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    • 2012-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-05
    • 2011-03-14
    相关资源
    最近更新 更多