java - 如何在 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 回调){ } }
解决方案
我将通过检查编辑文本是否有文本来验证,然后您可以使用模板使用自己的验证。如果您为步进器布局使用选项卡,则新的 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");
}
推荐阅读
- hyperledger-fabric - 无法连接到 Postgres 数据库 Postgres 需要连接到特定数据库,尝试了以下数据库:
- python - Matplotlib - 如何使用文档找到特定需求?
- c++ - 使用 HLSL 进行帧旋转
- mysql - Mysql Foreach 从一个表到另一个表第 2 部分
- spring-boot - JPA 的 deleteAll 在表中留下一个条目。我怎样才能清楚地删除所有条目?
- node.js - 机器人框架 continueDialog 没有弹出堆栈
- ios - Xcode 更新后如何修复 Core NFC 框架的无效授权
- youtube - 为什么 Google 不为其产品(如 google.com、youtube.com)使用 PWA 功能
- javascript - 使用对象过滤对象数组驻留在嵌套数组属性中
- asp.net-core - 升级到 ASP.NET Core 3.0 后,我得到“无法创建 stdoutLogFile 错误代码 = -2147024893”。