Spinner验证使用android saripaar

时间:2015-02-10 11:53:21

标签: android validation spinner saripaar

如何验证我的Spinner Android 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 {

    }
}

3 个答案:

答案 0 :(得分:4)

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

使用的注释

@Select
Spinner spin_country;

onValidationFailed

    @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);
            }
        }
    }

答案 1 :(得分: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);
        }
    }
}

我将我的微调器设置为不可聚焦,所以我没有看到任何错误信息,但我确实得到了红色感叹号。

希望这有用。

答案 2 :(得分:0)

在您的特定情况下,如果在Spinner中选择了第一项(索引0),则Spinner验证将会失败。

考虑这些是Spinner上的项目。

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

如果选择-- Country --,验证将失败,因为它是Spinner上的第一个项目(索引0)。