将参数传递给 DialogFragment 的“学术”方法是使用 setArguments(.) 的 newInstance 方法。但为了让事情变得简单,可以简单地:
class D extends DialogFragment{
public Context ctx;
public D newInstance(Context c){
D d = new D();
d.ctx = c;
//...
return d;
}
}
或者这在 Activity 代码中也是可能的
D d = new D();
d.some_data = other_data;
d.show(...);
那么为什么要使用更不舒服的 newInstance-setArgument 方案呢?
最佳答案
首选使用 arguments 方法,因为参数在方向更改和 fragment 销毁/恢复循环中仍然存在。这意味着如果由于某种原因对话框被销毁并稍后恢复,状态将被保留。如果直接操作字段, fragment 将无法保存其状态。
不使用参数模式是恢复应用程序时随机应用程序崩溃的常见原因。您可以通过转到设备开发人员选项并选中“不保留 Activity ”选项来对此进行测试。
关于android - 不使用newInstance/setArguments直接在Activity中创建DialogFragment是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25674389/