android - 不使用newInstance/setArguments直接在Activity中创建DialogFragment是否正确?

标签 android fragment dialogfragment

将参数传递给 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/

相关文章:

java - 如何在同一方法中返回fragment和fragmentactivity?

android - 带有 edittext 的 DialogFragment 在解雇后不会丢失键盘

android - 在android中合并两个或多个.wav文件

android - 如何为 volley 实现 JSON 流概念以避免 OutOfMemory 错误?

android - 我如何从android中的 Activity 中调用 fragment

java - Android - 在 View 中显示带有自定义文本的 fragment

Android DialogFragment 布局,奇怪的额外空白

android - 如何将日期传回 DialogFragment

java - 从旧 Canvas 上绘制 - Android

android - 如何在 android 中使用 GridView 创建自定义警报对话框?