我的类应将一个参数传递给DialogFragment,但我的应用程序在(对话类的)onCreate方法内崩溃,导致出现NullPointerException。
对话框 fragment 类的代码部分:
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");
}