如何验证输入字段并防止Dialog解雇

时间:2018-02-12 09:15:26

标签: android dialog

在我的应用程序中,我扩展Dialog class以获取每个字段的用户输入,现在我想验证它们。

public abstract class EditDialogHelper extends Dialog implements android.view.View.OnClickListener {

    private Context context;
    private String title;
    private String field;
    private String positive;
    private String negative;
    private EditText etField;
    private TextView tvCount;
    private int characterCount;

    public EditDialogHelper(Context context, String title, String field, String positive, String negative, int characterCount) {
        super(context);
        this.context = context;
        this.title = title;
        this.field = field;
        this.positive = positive;
        this.negative = negative;
        this.characterCount = characterCount;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.dialog_edit_view);

        TextView tvTitle = (TextView) findViewById(R.id.tvTitle);
        etField = (EditText) findViewById(R.id.etField);
        tvCount = (TextView) findViewById(R.id.tvInputCount);
        Button btnConfirmationOk = (Button) findViewById(R.id.btnPositive);
        Button btnConfirmationCancel = (Button) findViewById(R.id.btnNegative);

        final TextWatcher textWatcher = new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                tvCount.setText(String.valueOf(characterCount - s.length()));
            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        };

        etField.addTextChangedListener(textWatcher);
        tvTitle.setText(title);
        etField.setText(field);
        etField.setFilters(new InputFilter[]{new InputFilter.LengthFilter(characterCount)});
        btnConfirmationOk.setOnClickListener(this);
        btnConfirmationCancel.setOnClickListener(this);
    }

    public String getValue() {
        return  etField.getText().toString().trim();
    }



    private boolean validateInputs(String value) {
        boolean valid = false;
        if (value != null && !(value.equals(""))) {
            valid = true;
        } else {
            etField.setError("This can't be left empty");
        }
        return valid;
    }


}

一旦打开对话框,我希望在点击btnConfirmationOk后验证它,如果该字段为空,则应该防止它在显示错误时解除对话框。

我应该在哪里使用此validateInputs方法以及应该以哪种方式修改它。

1 个答案:

答案 0 :(得分:0)

我猜答案非常简单

@Override
void onClick(View view) {
      if (view.getId == R.id.btnPositive) {
       boolean valid = validate("my string");
         if(valid) {
           // do stuff
           dissmis();
         }
        } else {
           dissmis();
        }

}

但在我的意见中,您应该为您的可能和负面按钮设置不同的听众,而不是使用EditDialogHelper类跟踪所有内容。

这可以这样做。

button.setOnClickListener(new OnClickListener {

   @Override
   void onClick(View v) {
   }    

});

P.S。我从头脑中写下了所有内容,因此可能包含编译错误。