2015-02-23 9 views
1

Я знаю, как использовать метод View.isInEditMode.Каковы ограничения в EditMode для пользовательских представлений в Android?

Что я не совсем понимаю, это , когда следует использовать. То есть я должен предотвратить запуск в EditMode.

Существуют очевидные случаи, когда пользовательский вид делает все виды сумасшедших вещей, таких как доступ к БД, сети, потоки и т. Д., Где ясно, что вы должны избегать их, находясь в EditMode.

Я создал несколько пользовательских представлений, которые не делают ничего из вышеперечисленного. Они используют только обычный API-интерфейс рисования или загружают ресурсы, такие как чертежи.

При работе на устройстве они выглядят точно так, как ожидалось, но в дизайнере макета они либо не выглядят так, как должны, либо просто не могут отобразиться из-за какого-то загадочного исключения (обычно NullPointerException).

Итак, существуют ли какие-либо ограничения в EditMode для этих API?

+0

Какое исключение это было? – vadimvolk

+0

@vadimvolk Обычно NullPointerException. Отредактировал вопрос. –

ответ

2

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

Обычно вам нужно использовать View # isInEditMode, если ваше пользовательское представление пытается получить доступ к классам из своего конструктора (или измерить или нарисовать методы), где эти вызовы, например, попытаются получить доступ к фрейм-коду приложения, например, сказать FragmentManager. В этом случае вы пропускаете эти вызовы с помощью View # isInEditMode.

Трудно сказать больше о том, что проблема, которую вы видите, не зная больше. В частности, что именно вы видите NullPointerException (полная трассировка стека).

Это может быть ошибка layoutlib. Попробуйте переключить версию рендеринга (на панели инструментов рендеринга) на другую версию.

+0

Переключение версии с 21 на 19 сделал трюк. Все представлено отлично с 19. Я думаю, что отчет об ошибке - это следующий шаг? –