编辑
不幸的是,所提供的答案均无效,但我确实找到了解决问题的方法。我没有使用 onCreateDialog 方法,而是创建了自己的方法,该方法将上下文作为参数并在其中创建了 alertDialog。这可能不是最理想的解决方案,但足以满足我的需要。我会更多地修复它并在将来更改它。这是我所做的。
对话框类:
public class SaveDialog extends FragmentActivity {
PasswordGen pG = new PasswordGen();
public Dialog createDialog(Context mContext) {
AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
builder.setTitle("ok");
builder.setMessage("ok")
.setCancelable(false)
.setPositiveButton("ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
})
.setNegativeButton("no", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
});
AlertDialog dialog = builder.create();
dialog.show();
return dialog;
MainActivity:这是我调用 alertDialog 的地方:
private void savePassword() {
SaveDialog sD = new SaveDialog();
sD.createDialog(mContext);
}
我正在尝试设置一个在另一个类中设置的 AlertDialog。但是,当我将主 Activity 的上下文传递给 AlertDialog 类时,我得到一个 NullPointerException
这是我的警报对话框类
public class SaveDialog extends DialogFragment {
Context mContext;
public SaveDialog() {
}
public SaveDialog(Context mContext) {
this.mContext = mContext;
}
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
builder.setTitle("Save Password");
builder.setView(getContentView());
Dialog dialog = builder.create();
// dialog.show();
return dialog;
}
这是启动 onClick 的地方:
private void savePassword() {
mContext = PasswordGen.this;
SaveDialog savePasswordDialog = new SaveDialog(mContext);
savePasswordDialog.show(savePasswordDialog.getFragmentManager(), "password");
}
我很想知道答案。我已经尝试了从 getApplicationContext() 到 getActivity() 到 ActivityName.this 的所有方法,但我总是得到 NullPointerException。我什至设置了一个方法来检查 mContext 是否为 null 并且它返回为不为 null,但应用程序仍然崩溃。
最佳答案
您不是在创建 AlertDialog
,而是在创建 DialogFragment
。这个的生命周期是完全不同的。当 Android 系统创建您的 fragment 时,它不会通过 SaveDialog(Context mContext)
构造函数,而是通过默认构造函数,因此会出现 NullPointerException
。删除那个构造函数,它对你没有任何作用。
您可以像这样获取 DialogFragment
的上下文:
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Save Password");
builder.setView(getContentView());
Dialog dialog = builder.create();
return dialog;
}
关于Android - 使用 AlertDialog 时上下文为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13671108/