android - 验证由 ViewPager 托管的多个 fragment 上的字段

标签 android validation android-fragments android-viewpager

我的应用程序使用长表单,我决定在 ViewPager 中将其分成多个 Fragments。当您按下“保存”选项时,验证过程开始。

基本上验证是一些 EditTexts 不为空。我正在遍历 ViewPager 中的所有 Fragments,检查所有字段是否具有有效值。

// Inside Fragment
public boolean areFieldsValid() {
    return !mEditText.getText().toString().isEmpty()
}

public void showErrors() {
    mEditText.setError("cannot be blank");
}

如果 Fragment 中的字段无效,则 viewPager.setCurrentItem(position, true);fragment.showErrors()被调用以转到该 Fragment 并向用户显示错误。

onCreateView() 没有在有错误的 Fragment 上调用时,问题就来了。

发生这种情况是因为您还没有导航到该 Fragment(假设用户在 fragment1 上,错误在 fragment7 上,并且用户在 fragment1 上按了“保存”)或者因为用户旋转了设备并且每个 Fragment 上的所有 View 都被销毁了。

这个问题/问题不仅是因为 mEditText 会是 null,而且 Fragment 保存了它的状态,所以它可能不会甚至是一片空白。换句话说,下面的代码不是一个选项,因为即使指针为空,它也可能不为空。

// Inside Fragment
public boolean areFieldsValid() {
    return mEditText != null && !mEditText.getText().toString()isEmpty();
}

此时我想知道我的架构是否有误。我决定使用 ViewPager,因为表单真的很长,而且我一直在将数据从 Fragment 传递到 Activity 通过回调。

鉴于上述设置,我如何验证字段向用户显示哪个字段有错误?

最佳答案

您不能假设 UI 组件会在您需要的任何时候出现。该 fragment 可能会消失、被杀死或更糟,在不保存其实例状态的情况下被销毁。

我提供的是将数据保存在数据库中,并检查保存按钮单击事件是否设置了所有内容。这可以使用 ContentProviders 和 SQLiteDatabase 来完成。正如维吉尔在 here 中所说“多坚持,多坚持。”

关于android - 验证由 ViewPager 托管的多个 fragment 上的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23810185/

相关文章:

android - FloatingActionButton 展开成一个新的 Activity

android - 在方向更改时更改 RecyclerView 布局仅适用于第一个 View

android - setOnItemClickListener() 无法在 Fragment 中的 gridView 上工作

android - Android 5.0 (Lollipop) 上的菜单图标工具栏

android - 如何禁用ADT图形布局编辑器?

android - Android中的设备屏幕锁定/解锁状态事件

angularjs - Angular 形式验证相同的输入

java - 在 SQlite android 数据库中存储货币

javascript - textarea 上的正则表达式

html - 是否有 vCalendar 微格式验证器/完整性检查器?