DialogFragment参数和nullpointer异常

时间:2013-03-17 17:35:24

标签: android nullpointerexception android-dialogfragment

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

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");
}

我在这一行有nullpointer:

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”字符串不为null,我用

检查它
Log.i("SHOWFILEACTIVITY", file);

1 个答案:

答案 0 :(得分:7)

您正在通过构造函数创建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");
}