在不使用newInstance / setArguments的情况下直接在活动中创建DialogFragment是否正确?

时间:2014-09-04 20:24:21

标签: android fragment dialogfragment

将参数传递给DialogFragment的“accademic”方法是带有setArguments(。)的newInstance方法。但为了简单起见,可以简单地说:

class D extends DialogFragment{
    public Context ctx;
    public D newInstance(Context c){
        D d = new D();
        d.ctx = c;
        //...
        return d;
    }
}

或者在活动代码

中也可以这样做
D d = new D();
d.some_data = other_data;
d.show(...);

那么为什么要使用更难以理解的newInstance-setArgument方案?

3 个答案:

答案 0 :(得分:1)

首选使用arguments方法,因为参数在方向更改和片段销毁/恢复周期后仍然存在。这意味着如果由于某种原因对话框被销毁并稍后恢复,则会保留状态。如果你直接操作字段,片段就无法保存它的状态。

不使用参数模式是恢复到应用程序时随机应用程序崩溃的常见原因。您可以通过转到设备开发人员选项并选中“不要保留活动”选项来测试它。

答案 1 :(得分:0)

如果您希望在方向更改后保留这些变量的值,则应该使用setArgument模式。

答案 2 :(得分:0)

重新创建Fragment时,例如在设备轮换时,Bundle中存储的参数将被保留,因此您可以在onCreate()中再次检索它们。您直接初始化的字段将无效。