我的应用程序使用长表单,我决定在 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/