Изменение свойств представления после onCreate () - PullRequest
0 голосов
/ 04 августа 2010

Первый постер, новый для Android, и мне кажется, что я столкнулся с проблемой:

Я создаю динамический макет, состоящий из нескольких идентичных «составных» объектов (в основном это «плавающие» LinearLayouts, каждый из которых содержит значок (ImageView) и заголовок (TextView)). Координаты (x, y) каждого LinearLayout могут изменяться в зависимости от действий пользователя и требуют точного размещения (т. Е. Нельзя использовать RelativeLayout и т. Д.), Поэтому я размещаю их внутри AbsoluteLayout.

Во время onCreate () я добавляю каждый из этих объектов в качестве дочернего представления внутри объекта AbsoluteLayout, а затем устанавливаю (x, y) вручную. Пока проблем нет, отлично работает, начальный макет идеален.

Проблема:

После начального onCreate () я не могу изменить положение (x, y) этих объектов на экране. Я могу обновить их layoutParams, но экранная раскладка (внутри AbsoluteLayout) никогда не обновляется. Я пробовал forceLayout (), invalidate (), requestLayout (), ни один из них не работает.

Есть ли проблема с моим основным подходом, или я что-то упускаю?

Я думаю о том, чтобы перейти к SurfaceView и просто выполнить рендеринг сложным способом, но мой код работает на 99% великолепно, и я не хочу менять его, если мне это не нужно. Единственная проблема заключается в том, что менеджер компоновки просто отказывается регистрировать изменения положения для моих дочерних объектов.

Помогите, что я делаю не так?

1 Ответ

0 голосов
/ 04 августа 2010

Вы пытались создать обработчик для пользовательского интерфейса и затем обновить свой пользовательский интерфейс из этого ..

Пользовательский интерфейс не сможет обновляться из другого потока. Итак, создайте обработчик потока для пользовательского интерфейса и обновите изменения в пользовательском интерфейсе, используя этот обработчик.

-vinay

...