Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android DialogFragment参数和nullpointer异常_Android_Nullpointerexception_Android Dialogfragment - Fatal编程技术网

Android DialogFragment参数和nullpointer异常

Android DialogFragment参数和nullpointer异常,android,nullpointerexception,android-dialogfragment,Android,Nullpointerexception,Android Dialogfragment,我的类应该将一个参数传递给DialogFragment,但我的应用程序在(dialog类的)onCreate方法中因NullPointerException而崩溃。 代码的对话框片段类部分: public class ConfirmDialog extends DialogFragment { public ConfirmDialog() {} ConfirmDialog newInstance(String f) { ConfirmDialog d = new ConfirmDi

我的类应该将一个参数传递给DialogFragment,但我的应用程序在(dialog类的)onCreate方法中因NullPointerException而崩溃。 代码的对话框片段类部分:

public class ConfirmDialog extends DialogFragment {

public ConfirmDialog() {}

 ConfirmDialog newInstance(String f) {
    ConfirmDialog d = new ConfirmDialog();

    Bundle args = new Bundle();
    args.putString("FILE_NAME", f);
    d.setArguments(args);

    return d;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    file = getArguments().getString("FILE_NAME");
}
我将空指针指向这一行:

file = getArguments().getString("FILE_NAME");
我不知道为什么。 我还粘贴了调用对话框的代码

private void showConfirmDialog(String file) {
    FragmentManager fm = getSupportFragmentManager();
    ConfirmDialog dialog = new ConfirmDialog();
    Log.i("SHOWFILEACTIVITY", file);
    dialog.newInstance(file);
    dialog.show(fm, "fragment_confirm_dialog");
}
这里的“file”字符串不是空的,我已经用

Log.i("SHOWFILEACTIVITY", file);

您正在通过构造函数创建一个
ConfirmDialog
,然后调用
newInstance()
,这将创建另一个(正确的)
ConfirmDialog
。但是,您随后将放弃该适当的实例

要解决此问题,请执行以下操作:

您的
newInstance()
方法应该是静态的:

public static ConfirmDialog newInstance(String f) {
    ConfirmDialog d = new ConfirmDialog();

    Bundle args = new Bundle();
    args.putString("FILE_NAME", f);
    d.setArguments(args);

    return d;
}
showConfirmDialog()
应该更改,以便正确使用
newInstance()
方法

private void showConfirmDialog(String file) {
    FragmentManager fm = getSupportFragmentManager();
    Log.i("SHOWFILEACTIVITY", file);

    ConfirmDialog dialog = ConfirmDialog.newInstance(file);
    dialog.show(fm, "fragment_confirm_dialog");
}

好的,谢谢,很有效。我从未使用过newInstance函数,我犯了一个错误!但是为什么newInstance应该是静态的?@giozh因为我们想要创建对话框的
新的
实例,依赖已经创建的对话框实例是一种糟糕的设计方法。保持方法静态将删除依赖项并减少对象创建。