5

我的类应该将一个参数传递给 DialogFragment,但我的应用程序在(对话框类的)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");
}

这里的“文件”字符串不为空,我已经检查过了

Log.i("SHOWFILEACTIVITY", file);
4

1 回答 1

7

您正在ConfirmDialog通过构造函数创建 a ,然后调用newInstance(),这将创建另一个 (proper) 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");
}
于 2013-03-17T17:41:39.357 回答