Android显示活动中的对话框



我创建了一个扩展DialogFragment类的新类:

public class SaveDataDialog extends DialogFragment {
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        // Get the layout inflater
        LayoutInflater inflater = getActivity().getLayoutInflater();
        // Inflate and set the layout for the dialog
        // Pass null as the parent view because its going in the dialog layout
        builder.setView(inflater.inflate(R.layout.save_data_dialog, null))
        // Add action buttons
                .setPositiveButton(R.string.save_data, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int id) {
                        Toast.makeText(getActivity(), "Testing positive button", Toast.LENGTH_LONG).show();
                    }
                }).setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        SaveDataDialog.this.getDialog().cancel();
                    }
                });
        return builder.create();
    }
}

在我的主要活动的某个地方(单击按钮的内部),我想显示这个对话框。所以我尝试了:

SaveDataDialog sdd = new SaveDataDialog();
sdd.getDialog().show();

第二行给出一个空指针异常。

如何显示对话框?这就是我想要做的。

您的SaveDataDialog扩展了DialogFragment,您可以调用sdd.show()来显示DialogFragment

尝试

sdd.show();

而不是

sdd.getDialog().show();

由于对话框扩展了DialogFragment,因此不必调用.getDialog()

更多详细信息:http://android-developers.blogspot.com/2012/05/using-dialogfragments.html

在活动内部,使用以下代码显示对话框片段。

SaveDataDialog saveDataDialog = new SaveDataDialog();
saveDataDialog.show(getFragmentManager(), SaveDataDialog.class.getName());

http://developer.android.com/reference/android/app/DialogFragment.html#show(android.app.FragmentTransaction,java.lang.String)

如果你的应用程序支持3.0.x之前的Android版本,你需要使用支持库并导入Android.app.v4.DialogFragment.

http://developer.android.com/tools/support-library/index.html

最新更新