2010-08-04 5 views
0

Первого раза плаката нового для Android, и я, кажется, ударил заграждение по этой проблеме:Изменение Просмотр свойств после OnCreate()

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

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

Проблема:

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

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

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

Помогите, что я делаю неправильно?

ответ

0

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

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

-vinay

+0

Я запутался здесь, как я думал, что UI жили в главном потоке (той же самой, что называется OnCreate()). Разве это не так? Я еще не создал никаких дополнительных потоков в моем приложении. – dreambig

+0

Вы правы, пользовательский интерфейс является частью основной темы. Он будет работать до тех пор, пока приложение не будет убито. Но когда вы пытаетесь обновить пользовательский интерфейс из другого места, у вас может не получиться доступ. Обычно я заметил, что он терпит неудачу, когда я жду некоторых событий. – Vinay

+1

Обновление: я переместил все в пользовательский объект SurfaceView, и он работает намного лучше. Следующий учебник был отличным стартовым местом для меня: http://www.droidnova.com/playing-with-graphics-in-android-part-i,147.html – dreambig