3

如何验证我的SpinnerAndroid Saripaar?

我已Spinner通过以下方式声明我的。

@Select(order = 8)
Spinner spin_country;

这是我的onValidationFailed()方法。

@Override
public void onValidationFailed(View failedView, Rule<?> failedRule) {
    // TODO Auto-generated method stub

    String message = failedRule.getFailureMessage();
    if (failedView instanceof Spinner) {
        failedView.requestFocus();
        // What should i do here??
    } else {

    }
}
4

3 回答 3

4

如果您想要比 提供的更简单的解决方案user3508814,只需执行以下操作(无需跟踪spinnerSelections):

使用的注释

@Select
Spinner spin_country;

验证失败

    @Override
    public void onValidationFailed(List<ValidationError> errors) {
        for (ValidationError error : errors) {
            View view = error.getView();
            String message = error.getCollatedErrorMessage(this);

            // Display error messages
            if (view instanceof EditText) {
                ((EditText) view).setError(message);
            }
            else if (view instanceof Spinner) {
                ((TextView) ((Spinner) view).getSelectedView()).setError(message);
            }
        }
    }
于 2016-04-26T22:39:36.697 回答
1

这是我的解决方案。

使用地图来跟踪微调器及其文本视图(如果您有多个)。

private Map<View, TextView> spinnerSelections = new HashMap<View, TextView>();

使用 OnItemSelectedListener 记录微调器选择的更改。这会在活动加载时触发,因此将跟踪您的默认选择。

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            spinnerSelections.put(parent, (TextView) view);
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });

在微调器的文本视图上设置错误

@Override
public void onValidationFailed(List<ValidationError> errors) {
    for (ValidationError error : errors) {
        View view = error.getView();
        String message = error.getCollatedErrorMessage(this);

        if (view instanceof EditText) {
            ((EditText) view).setError(message);
        }
        else if (view instanceof Spinner) {
            spinnerSelections.get(view).setError(message);
        }
    }
}

我将微调器设置为不可聚焦,因此我看不到任何错误消息,但我确实得到了红色感叹号。

希望这会有所帮助。

于 2015-04-01T23:03:20.773 回答
0

在您的特定情况下,Spinner如果在您的Spinner.

考虑到这些是您的Spinner.

-- Country --
Albania
France
India
Sri Lanka
...

如果选中,验证将失败-- Country --,因为它是Spinner.

于 2015-02-12T04:42:45.827 回答