当前位置: 首页 > 知识库问答 >
问题:

如何在Android Material Stepper中验证表单?

严书
2023-03-14

我一直在使用https://github.com/stepstone-tech/android-material-stepper中的stepper库

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

代码如下:

public class FragmentProfileBasic extends Fragment implements BlockingStep {

    EditText et_fname,et_lname,et_phone,et_address,et_city,et_state,et_profile_bio,et_dob;
    Spinner rel_status;
    RadioGroup radioGroup;
    RadioButton radioButton;
    String relStatus,gender,phone,address,city,state,profile_bio,dob;
    AwesomeValidation awVal;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View 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);

        return v;
    }

    @Override
    public VerificationError verifyStep() {
        //return null if the user can go to the next step, create a new VerificationError instance otherwise
        return null;
    }

    @Override
    public void onSelected() {
        //update UI when selected
    }

    @Override
    public void onError(@NonNull VerificationError error) {
        //handle error inside of the fragment, e.g. show error on EditText
    }

    @Override
    public void onNextClicked(StepperLayout.OnNextClickedCallback callback) {
        if(awVal.validate()) {
            callback.goToNextStep();
        }
    }

    @Override
    public void onCompleteClicked(StepperLayout.OnCompleteClickedCallback callback) {
        callback.complete();
    }

    @Override
    public void onBackClicked(StepperLayout.OnBackClickedCallback callback) {

    }
}

共有1个答案

彭雨华
2023-03-14

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


@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");

}
 类似资料:
  • 问题内容: 下面的代码对于执行基本的必需表单验证似乎效果很好。 当该字段是脏的+无效且为 Great 时,该表单将显示红色的 Name required 消息 。 如果该字段是脏的+有效消息。 但是,对于表单中的每个字段重复此代码是很混乱的: 我希望能够以更简单的方式指定和属性。 问题答案: 一种方法是将验证表达式抽象到范围方法: 控制者

  • 问题内容: HTML: 用于侦听输入[type = file]的自定义指令更改: 选择文件后,控制台中将显示以下错误: 错误:InvalidStateError:DOM异常11错误:试图使用一个不可用或不再可用的对象。 尝试使用plunkr:http ://plnkr.co/edit/C5j5e0JyMjt9vUopLDHc?p=preview 没有该指令,输入文件字段的状态将不会被推送到form

  • 当尝试验证表单(获取请求)时,我知道Result绑定,当尝试验证请求正文时,我也知道@Valid,但我不知道如何验证multipartForm Request参数。当我将json转换为对象时,我有一个带有请求参数的多部分表单,其中包含我的User.class.的json字符串表示形式, 如何检查user类中的参数是否满足要求,例如(电子邮件中有'@'或名字没有数字值)? 这是我的代码,控制器: 这

  • 我有一个简单的表单,需要验证输入的开头和结尾是否不是空格。 在HTML5中,我将这样做: 在新的Angular 2 ngControl指令中,验证模式的正确属性是什么?官方的Beta API在这个问题上仍然缺乏留档。

  • 问题内容: 有没有办法在不使用PHP的情况下检查变量是否为有效的JSON字符串?我没有PHP 5.3.3。 问题答案:

  • 我有一个电子邮件地址字段,其中有一个客户端验证,不允许几个临时域,如tempmailder.com或dispostable.com. 在服务器端,我使用了fluent验证来指定验证规则。 web中不允许的临时域。将文件配置为逗号分隔的字符串。 我是否可以指定一种方法来验证用户根据不允许的电子邮件域列表输入的值。 谢啦