Android - 使用 AlertDialog 时上下文为空

标签 android dialog alert fragment

编辑

不幸的是,所提供的答案均无效,但我确实找到了解决问题的方法。我没有使用 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/

相关文章:

javascript - 如何使用 Response.Write ("<script>alert(' Center Page')</script>") 设置警报页面样式

android - 如何将 ListView 滚动到特定的 id 并将该项目设置为已选中?

android - 如果提供横向模式的替代布局,则纵向模式的共享动画不会动画。 (适用于 android 支持库 23.0.0)

android - SQLite 返回错误代码 14

C#、WPF、MVVM、为消息对话框/确认对话框创建 View 模型?

javascript - 保存数据后单击按钮时显示警报消息 asp.net

javascript - 显示消息而不是警报

android - 多个微调器上的 OnItemSelectedListener 不工作

android - 禁用(淡入和淡出)对话框动画

iOS SDK : Feed Dialog without authorize gets send to facebook home page