在AlertDialog中验证Android EditText

4

我正在尝试在警告对话框内验证一些EditTexts,但当我点击“确定”按钮时,对话框只是消失了,如您在我的代码中所看到的,如果字段为空,应该出现错误消息,我错过了什么,任何帮助将不胜感激。

final TextView id = (TextView) spinner.getSelectedView();
                final EditText descricao = (EditText) v.findViewById(R.id.add_descricao);
                final EditText observacao = (EditText) v.findViewById(R.id.add_observacao);
                final EditText data = (EditText) v.findViewById(R.id.add_data);
                final EditText valor = (EditText) v.findViewById(R.id.add_valor);


alertDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {

                        data.setError(null);
                        valor.setError(null);

                        String campo_data = data.getText().toString();
                        String campo_valor = valor.getText().toString();

                        if (TextUtils.isEmpty(campo_data)) {
                            data.setError(getString(R.string.flObrigatorio));
                            focusView = data;
                            op = true;
                        }

                        if (TextUtils.isEmpty(campo_valor)) {
                            valor.setError(getString(R.string.flObrigatorio));
                            focusView = data;
                            op = true;
                        }

                        if (op) {
                            focusView.requestFocus();

                        } else {


                            DespesaModel mDespesaModel = new DespesaModel();


                            //Formata data para enviar para o banco

                            Date dNow = new Date();
                            SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                            Repositorio mRepositorio = new Repositorio(getApplicationContext());

                            DespesaCategoriaModel mDespesaCategoriaModel = mRepositorio.getCategoriaDespesaPorId(id.getId(), false);


                            mDespesaModel.setId_rm_empresa(Integer.valueOf(rm_IdEmpresa));
                            mDespesaModel.setId_rm_despesa_categoria(mDespesaCategoriaModel.getId_rm());
                            mDespesaModel.setId_despesa_categoria(mDespesaCategoriaModel.getId());
                            mDespesaModel.setId_rm_credencial(Integer.valueOf(mSessao.getString("id_credencial")));
                            mDespesaModel.setId_rm_viagem(Integer.valueOf(rm_IdViagem));
                            mDespesaModel.setData(mFerramentas.dataBr(campo_data));
                            mDespesaModel.setValor(valor.getText().toString().substring(2).replace(".", "").replace(",", "."));
                            mDespesaModel.setDescricao(descricao.getText().toString());
                            mDespesaModel.setObservacao(observacao.getText().toString());
                            mDespesaModel.setCriado(ft.format(dNow));
                            mDespesaModel.setModificado(ft.format(dNow));
                            mDespesaModel.setStatus("A");


                            mRepositorio.CadastrarDespesa(mDespesaModel, false);


                            carregaDespesas();
                        }
                    }

                });

默认的警告对话框在任何按钮点击后都会自动关闭。您需要创建一个自定义警告对话框。 - Rohit5k2
1个回答

14

你并没有告诉应用程序它应该保留在AlertDialog上,而是只给一个对象设置了一个错误。

解决方法是将onShowListener事件添加到AlertDialog中,在那里可以重写按钮的onClickListener

示例:

final AlertDialog d = new AlertDialog.Builder(context)
        .setView(v)
        .setTitle(R.string.my_title)
        .setPositiveButton(android.R.string.ok, null) //Set to null. We override the onclick
        .setNegativeButton(android.R.string.cancel, null)
        .create();

d.setOnShowListener(new DialogInterface.OnShowListener() {

    @Override
    public void onShow(DialogInterface dialog) {

        Button b = d.getButton(AlertDialog.BUTTON_POSITIVE);
        b.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                // TODO Do something

                //Dismiss once everything is OK.
                d.dismiss();
            }
        });
    }
});

对话框根本没有显示 - Sadique Khan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接