【问题标题】:Validation in Robobinding framework (Android)Robobinding 框架 (Android) 中的验证
【发布时间】:2014-10-08 10:36:12
【问题描述】:

我是 Android 开发的新手。我使用 Robobinding (MVVM framework) 开发 Android 应用程序,但我没有找到任何解决方案来在演示模型中创建验证(而不是在活动中)。有没有人遇到过类似的问题?选择哪种方法? 我需要这样的东西:

public class LoginPM extends AbstractPresentationModel {
        private String login;
        public String getLogin() { return login; }
        public void setLogin(String value)
        {
            if (!StringComparator.IsEquals(this.login, value))
            {
                if(TextUtils.isEmpty(value))
                {
                 setError("login", "Field cannot be left blank.");
                 return;
                }
                this.login = value;
                firePropertyChange("login");
            }
        }
  }

【问题讨论】:

    标签: android validation robobinding


    【解决方案1】:

    抱歉回复晚了。我没有注意到这个问题。你的 LoginActivity 和 LoginPM 之间可以有一个 LoginView 接口吗?这样,您可以执行以下操作:

    public void login() {
      if(isInvalid(loginInfo)) {
        loginView.setLoginError("error info");
      } else {
        loginService.login(loginInfo);
      }
    }
    

    或者,您可以为 TextView 实现 OnTextChange 事件,这很容易做到。可以参考TextView的文本属性绑定实现。你可以注册一个方法来监听事件。触发事件后,您可以从事件对象中获取 TextView。

    另外,您可以为 TextView 实现错误绑定属性并相应地更新错误信息。

    如果您愿意,可以在 RoboBinding 谷歌群组发帖以获得快速回复。

    希望这会有所帮助, 程

    【讨论】:

    • 另外,您可以为 TextView 实现错误绑定属性并相应地更新错误信息。 这真的可能吗?我认为 TextView 和 EditText 没有可访问的错误属性。只有方法 setError("MSG") 是可能的。
    • @Holla,这肯定是可能的。您只需像任何其他绑定属性一样为 TextView.error 实现绑定属性。如果您有兴趣,请查看文档和源代码。这很容易做到。
    • 好的,我会尝试,我认为它无法访问,因为它不在 XML 属性列表中:developer.android.com/reference/android/widget/TextView.html
    • 不,它不需要在 Android XML 属性列表中。
    • 对我不起作用:org.robobinding.binder.ViewHierarchyInflationErrorsException: -------------------------EditText(1 errors)----------------------- error: Unrecognized attribute 'error' -------------------------The first error stack trace----------------------- error: Unrecognized attribute 'error' at org.robobinding.PendingAttributesForViewImpl.getResolutionErrors(PendingAttributesForViewImpl.java:43) at org.robobinding.binder.BindingAttributeResolver.resolve(BindingAttributeResolver.java:38)
    【解决方案2】:

    我已经使用反射解决了我的任务,以从绑定对象映射 (Robobindings) 获取用户控件。 https://github.com/Barbanyaga/RobobindingValidation/blob/master/BasePresentationModel.java

    这样使用:

    public class LoginPM extends BasePresentationModel {
            private String login;
            public String getLogin() { return login; }
            public void setLogin(String value)
            {
                if (!StringComparator.IsEquals(this.login, value))
                {
                    if(TextUtils.isEmpty(value))
                    {
                     setError("login", "Field cannot be left blank.");
                     return;
                    }
                    this.login = value;
                    firePropertyChange("login");
                }
            }
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-22
      相关资源
      最近更新 更多