在DialogFragment上使用Outsideclick关闭不能使用Android

时间:2015-09-12 13:37:49

标签: android dialogfragment

我有一个cutstom DialogFragment向用户显示一条消息:

public class MensajeDialogFragment extends DialogFragment {
    TextView mTvMensaje;
    TextView mTvTitulo;
    Button mBtnAceptar;
    Button mBtnCancelar;            

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        LayoutInflater inflater = getActivity().getLayoutInflater();

        View dialogView = inflater.inflate(R.layout.layout_mensaje_dialog, null);
        mTvTitulo = (TextView) dialogView.findViewById(R.id.tvTitulo);
        mTvMensaje = (TextView) dialogView.findViewById(R.id.tvMensaje);
        mBtnAceptar = (Button) dialogView.findViewById(R.id.btnAceptar);
        mBtnCancelar = (Button) dialogView.findViewById(R.id.btnCancelar);

        mTvTitulo.setText(getArguments().getString(getString(R.string.bundle_titulo), ""));
        mTvMensaje.setText(getArguments().getString(getString(R.string.bundle_mensaje), ""));
        mBtnAceptar.setText(getArguments().getString(getString(R.string.bundle_aceptar), ""));
        mBtnCancelar.setText(getArguments().getString(getString(R.string.bundle_cancelar), ""));    

        builder.setView(dialogView);

        getDialog().setCanceledOnTouchOutside(true);

        return builder.create();
    }


}

但是当我到达getDialog().setCanceledOnTouchOutside(true)时,由于NullPointerException正在返回getDialog(),我收到null

我做错了什么?我想在用户点击对话框时关闭对话框。

1 个答案:

答案 0 :(得分:1)

由于您使用的是 DialogFragment ,因此无法在 DialogFragment 的onCreate上初始化对话框。 我相信当用户在其外部点击时,默认情况下DialogFragment会关闭。您不必明确声明它。如果您仍想调用此函数,则 DialogFragment 会有一个名为

的函数
 DialogFragment.setCancelable(boolean)

修改

如果上述代码无效,您可以尝试拨打

 getDialog().setCanceledOnTouchOutside(true);
在onCreateDialog期间,在 getLayoutInflater 上初始化onCreateView作为Dialog对象。因此,当它到达onCreateView时,对话框对象将被初始化。