Итерация по перечислению AttributeSet - PullRequest
1 голос
/ 25 мая 2011

У меня есть следующий код:

    private static boolean hasTargetStyle(AttributeSet attributes) {
        final Enumeration<?> attributeNames = attributes.getAttributeNames();
        while (attributeNames.hasMoreElements()) {
            final Object attributeName = attributeNames.nextElement();
            if (attributeName.equals(MY_STYLE_NAME)) {
                return true;
            }
        }

        return false;
    }

Теперь я думаю, что этот код будет проходить через каждое из имен атрибутов. Но он только дает мне имя каждого другого атрибута (с четными индексами).

Что здесь не так?

Ответы [ 4 ]

1 голос
/ 25 мая 2011

В данный момент я не вижу ничего плохого в вашем коде, но попробуйте использовать Collections.list

private static boolean hasTargetStyle(AttributeSet attributes) {
    final List<?> attributeNames = Collections.list(attributes.getAttributeNames());

    for(Object name: attributeNames){
        if(name.equals(MY_STYLE_NAME)){
            return true;
        }
    }

    return false;
}
1 голос
/ 25 мая 2011

Я сомневаюсь, что это проблема с java.util.Enumeration (хотя это просто интерфейс, и в реальной реализации может быть ошибка). Ваша реализация выглядит хорошо для меня.

Другая идея: начальная AttributeSet может содержать только все остальные атрибуты. Попробуйте установить точку останова и взгляните на внутреннюю часть фактического набора атрибутов.

1 голос
/ 25 мая 2011

Я не думаю, что у него есть индекс - у Set нет индекса.И код выглядит хорошо.Если getAttributeNames() не возвращает ошибочное перечисление реализации, оно должно работать.

0 голосов
/ 25 мая 2011

Внутренний список, который я просматривал в отладчике, имел чередующиеся имена и значения.Итак, мой код в некотором смысле правильный, но мои намерения были неверными.

...