【问题标题】:Android Saripaar issue with fragments (DialogFragment)Android Saripaar 片段问题 (DialogFragment)
【发布时间】:2013-07-11 08:39:31
【问题描述】:

我在活动中成功使用了 Saripaar,但是现在,当我将它与 DialogFragment 一起使用时,即使输入错误,它也总是转到 onSuccess

我的Fragment 正在实现ValidationListener 并且Validator 也在FragmentonCreate() 中初始化。

有没有人知道它在片段中的行为..???


这是我的代码概览...

public class MyDialogFragment extends DialogFragment implements ValidationListener {
    // Declaring validator
    private Validator validator;

    // views to validate
    @Required(order = 1)
    @TextRule(order = 5, minLength = 6, message = "Enter at least 6 characters.")
    private EditText nameEditText;

    @Required(order = 2)
    private EditText addressEditText;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Initializing validation process
        validator = new Validator(getActivity()); /*====*/
        validator.setValidationListener(this);
    }

    positiveButton.setOnClickListener(new View.OnClickListener() {
        @Override
            public void onClick(View v) {
            // Validating on positive button event
                validator.validate();
            }
        });
    }

    // Here are the validation listener methods to implemented
    // Just copy pasted from you github account tutorial page
}

每件事似乎都是正确的...onSuccess 事件每次都完美调用...不知道实际上是什么问题,或者我做错了什么...

我怀疑的一件事是,在validator = new Validator(getActivity()); 行中调用getActivity() 可能会导致问题,例如您的实现取决于活动的上下文,并且在对话片段中,我们脱离了上下文……嗯,你可以猜得更好...:)

【问题讨论】:

    标签: android validation saripaar


    【解决方案1】:

    试试这个,

    validator = new Validator(this); /*====*/
    

    而不是

    validator = new Validator(getActivity()); /*====*/
    

    另外,请使用最新的来源。罐子有点过时了。让我知道这是否有帮助。

    【讨论】:

    • 我正在使用在 github 帐户中找到的最新 jar (11242012)...我也尝试传递 'this',但编译器说“构造函数 Validator(MyDialogFragment) 是 undefiend。”。我也将 MyDialogFragment 转换为 Fragment 但没有任何收获。我也可以看到带有 Activity 和 Fragment 的构造函数,但它不接受 DialogFragment...
    • 最新的jar已经过时了。请使用源代码。我会尽可能上传一个 jar。
    【解决方案2】:

    添加一个额外的“if”来询问“控制器”是否属于“支持”片段类型,在不使用“原生片段”的情况下,这样做也可以在此类中进行验证片段

    这里是我的 Validator.java

     public Validator(final Object controller) {
            assertNotNull(controller, "controller");
            ...
    
            else if(controller instanceof android.support.v4.app.Fragment){
                Activity activity = (Activity) ((android.support.v4.app.Fragment) controller).getContext();
                mValidationContext = new ValidationContext(activity);
            }
    
        }
    

    更新

    现在无需更改即可支持 android.support.v4.app.Fragment,我的更改请求已被接受 :)

    https://github.com/ragunathjawahar/android-saripaar/pull/205/commits/673b7ea7174848b96bce1ae82fa2118d1af9f128

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多