首页 > 解决方案 > 如何在 Android Material Stepper 中验证表单?

问题描述

我一直在使用来自https://github.com/stepstone-tech/android-material-stepper的步进器库

我已经为步进器创建了片段和适配器。它运行没有错误。每个片段都有一些表单元素。

为了验证这些元素,我正在使用 AwesomeValidation 库。但是当我validate()在验证时运行方法时它不起作用。它也没有给出任何错误。

如果有人以正确的方式指导我,那将非常有帮助。

这是代码:

公共类 FragmentProfileBasic 扩展 Fragment 实现 BlockingStep {

    EditText et_fname,et_lname,et_phone,et_address,et_city,et_state,et_profile_bio,et_dob;
    微调器 rel_status;
    无线电组无线电组;
    单选按钮单选按钮;
    字符串 relStatus,gender,phone,address,city,state,profile_bio,dob;
    AwesomeValidation awVal;

    @覆盖
    public View onCreateView(LayoutInflater inflater, ViewGroup 容器, Bundle savedInstanceState) {
        查看 v = inflater.inflate(R.layout.fragment_profile_basic, container, false);

        et_fname=v.findViewById(R.id.fname);
        et_lname=v.findViewById(R.id.lname);
        et_phone=v.findViewById(R.id.phone);
        //et_address=v.findViewById(R.id.address);
        et_city=v.findViewById(R.id.city);
        et_state=v.findViewById(R.id.state);
        et_profile_bio=v.findViewById(R.id.profile_bio);
        et_dob=v.findViewById(R.id.dob);
        radioGroup = v.findViewById(R.id.radio);

        awVal = new AwesomeValidation(ValidationStyle.BASIC);
        awVal.addValidation(getActivity(), R.id.fname, "[a-zA-Z\\s]+", R.string.fname_error);
        awVal.addValidation(getActivity(), R.id.phone, "[0-9]+", R.string.phone_error);
        awVal.addValidation(getActivity(), R.id.city, "[a-zA-Z\\s]+", R.string.city_error);
        awVal.addValidation(getActivity(), R.id.state, "[a-zA-Z\\s]+", R.string.state_error);
        awVal.addValidation(getActivity(), R.id.profile_bio, "[a-zA-Z0-9!#@.\\s]+", R.string.covertitle_error);
        //awVal.addValidation(this, R.id.profile_bio, "[a-zA-Z0-9!#@.\\s]+", R.string.bio_error);
        awVal.addValidation(getActivity(), R.id.dob, "[0-9/]+", R.string.dob_error);

        返回 v;
    }

    @覆盖
    公共验证错误 verifyStep() {
        //如果用户可以进行下一步,则返回null,否则创建一个新的VerificationError实例
        返回空值;
    }

    @覆盖
    公共无效 onSelected() {
        //选择时更新UI
    }

    @覆盖
    public void onError(@NonNull VerificationError 错误) {
        //处理片段内部的错误,例如在EditText上显示错误
    }

    @覆盖
    公共无效 onNextClicked(StepperLayout.OnNextClickedCallback 回调){
        如果(awVal.validate()){
            回调.goToNextStep();
        }
    }

    @覆盖
    公共无效 onCompleteClicked(StepperLayout.OnCompleteClickedCallback 回调){
        回调.完成();
    }

    @覆盖
    公共无效 onBackClicked(StepperLayout.OnBackClickedCallback 回调){

    }
}

标签: javaandroid

解决方案


我将通过检查编辑文本是否有文本来验证,然后您可以使用模板使用自己的验证。如果您为步进器布局使用选项卡,则新的 VerificationError 将显示在选项卡顶部,并且图标将变为错误图标


@Nullable
@Override
public VerificationError verifyStep() {

               if (et_fname.getText().toString().trim().isEmpty()) {

                    et_fname.requestFocus();

                    return new VerificationError("First name has not been entered");

                } else if (et_lname.getText().toString().trim().isEmpty()) {

                    et_lname.requestFocus();

                    return new VerificationError("Last name has not been entered");


                } else if (et_phone.getText().toString().trim().isEmpty()) {

                    et_phone.requestFocus();

                    return new VerificationError("Phone number has not been entered");


                } else if (et_city.getText().toString().trim().isEmpty()) {

                    et_city.requestFocus();

                    return new VerificationError("City has not been entered");


                } else if (et_state.getText().toString().trim().isEmpty()) {

                    et_state.requestFocus();

                    return new VerificationError("State has not been entered");


                } else {

                      return null;
                }


        return new VerificationError("We encountered an error");

}

推荐阅读