如何在 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?