1

编辑

不幸的是,提供的答案都没有奏效,但我确实找到了解决问题的方法。我没有使用 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,但应用程序仍然崩溃。

4

4 回答 4

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;
}
于 2012-12-02T16:38:33.080 回答
0

我认为问题在于,当您AlertDialog使用它创建时Builder,您使用的mContext是初始化为 null 的变量。

Yo 必须重写该DialogFragment onCreate函数以获得正确的Context然后初始化您的mContext变量。

于 2012-12-02T16:23:09.013 回答
0

你试过改变

AlertDialog.Builder builder = new AlertDialog.Builder(mContext);

AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());

看看有没有效果?除非您出于任何原因必须通过 mContext 。但据我所知,mContext 没有被设置并且保持为空。

于 2012-12-02T16:25:10.840 回答
0

尝试删除空的构造函数:

public SaveDialog() {
}

并在初始化 mContext 时只保留第二个构造函数。

于 2012-12-02T16:33:41.170 回答