将参数传递给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方案?
答案 0 :(得分:1)
首选使用arguments方法,因为参数在方向更改和片段销毁/恢复周期后仍然存在。这意味着如果由于某种原因对话框被销毁并稍后恢复,则会保留状态。如果你直接操作字段,片段就无法保存它的状态。
不使用参数模式是恢复到应用程序时随机应用程序崩溃的常见原因。您可以通过转到设备开发人员选项并选中“不要保留活动”选项来测试它。
答案 1 :(得分:0)
如果您希望在方向更改后保留这些变量的值,则应该使用setArgument模式。
答案 2 :(得分:0)
重新创建Fragment
时,例如在设备轮换时,Bundle
中存储的参数将被保留,因此您可以在onCreate()
中再次检索它们。您直接初始化的字段将无效。