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

Posted

技术标签:

【中文标题】如何在 Android Material Stepper 中验证表单?【英文标题】:How can I validate a form inside Android Material Stepper? 【发布时间】:2020-02-27 13:16:10 【问题描述】:

我一直在使用 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 回调)

【问题讨论】:

你修好了吗,如果是,你能分享一下代码吗? 是的,我已经用onNextClicked方法解决了。您可以使用任何验证器插件,也可以检查输入或控件是否为空。 【参考方案1】:

我将通过检查编辑文本是否包含文本来进行验证,然后您可以使用模板使用您自己的验证。如果您为步进器布局使用选项卡,则新的 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");


【讨论】:

感谢@Emmanuel 提供您的代码 sn-p。这可以用来检查edittext是否为空。但我的问题是关于 AwesomeValidation 库。 @ImustechS 您可以在编辑文本 xml 中使用 inputType,它将验证 phoneNumber、numberDecimal、numberSigned、电子邮件等

以上是关于如何在 Android Material Stepper 中验证表单?的主要内容,如果未能解决你的问题,请参考以下文章

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

如何在 Android 中实际使用 Material Design 工具生成的调色板?

如何在 Android 通知中将 Material Icons 用作 LargeIcon?

如何更改 Angular Material 步进器中的状态图标?

Material - 将指令传递给子组件

如何在 Android 上实现 Material Design 展开/折叠列表?