修改
不幸的是,提供的答案都没有用,但我确实找到了解决问题的方法。我没有使用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。但是当我将主要活动的上下文传递给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,但应用程序仍然崩溃。
答案 0 :(得分:1)
您没有创建AlertDialog
,而是创建了DialogFragment
。这个生命周期是完全不同的。当Android系统创建你的片段时,它不会通过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;
}
答案 1 :(得分:0)
我认为问题在于,当您使用AlertDialog
创建Builder
时,您正在使用初始化为null的mContext
变量。
Yo必须覆盖DialogFragment onCreate
函数才能获得正确的Context
,然后初始化您的mContext
变量。
答案 2 :(得分:0)
您是否尝试过更改
AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
到
AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());
看看是否有效?除非你因任何原因必须传递mContext。但是从我可以看到mContext没有设置并保持为null。
答案 3 :(得分:0)
尝试删除空构造函数:
public SaveDialog() {
}
并在初始化mContext时仅保留第二个构造函数。