Android: for 循环通过 EditText、CheckBoxed 和 Spinners 到 setErrors

Android: for loop through EditText, CheckBoxed and Spinners to setErrors

这段代码从列表中获取资源,并为注册表单上的每个字段设置错误,其中一个是微调器,所以当错误在微调器上时,由于微调器而失败不是 TextView 的子类。我怎样才能让这段代码以优雅的方式处理微调器?

// set errors
        for (Map.Entry<String, List<String>> error : errors.entrySet()) {
            int id = getActivity().getResources().getIdentifier("edit_" + error.getKey(), "id", getActivity().getPackageName());
            //TODO this codes doen't manage spinner errors! (checkboxes and editext are both TextView)
            TextView edit = (TextView) getActivity().findViewById(id);
            if (!error.getValue().isEmpty()) {
                edit.setError(error.getValue().get(0));
            }
        }

您可以检查当前视图是否是文本视图的实例。如果是,则继续并将其转换为 TextView,并执行您在其上执行的任何操作。否则,以您喜欢的任何方式处理 checkboxes/spinner/whatever。

 for (Map.Entry<String, List<String>> error : errors.entrySet()) {
        int id = getActivity().getResources().getIdentifier("edit_" + error.getKey(), "id", getActivity().getPackageName());

        View edit = getActivity().findViewById(id);
        if (!error.getValue().isEmpty() && edit instanceof TextView) {
             TextView editTextView = (TextView)edit;
             editTextView.setError(error.getValue().get(0));
        }
    }

我就是这样解决的,非常感谢Urban

 // set errors
        for (Map.Entry<String, List<String>> error : errors.entrySet()) {
            int id = getActivity().getResources().getIdentifier("edit_" + error.getKey(), "id", getActivity().getPackageName());
            View edit = getActivity().findViewById(id);

            if (!error.getValue().isEmpty() && edit instanceof TextView) {
                TextView mTextView;
                mTextView = (TextView)edit;
                mTextView.setError(error.getValue().get(0));
            } else if (!error.getValue().isEmpty() && edit instanceof Spinner){
                Spinner mSpinner;
                mSpinner = (Spinner)edit;
                ((TextView)mSpinner.getChildAt(0)).setError(error.getValue().get(0));
            }
        }