макет ежевики изменить высоту поля - PullRequest
1 голос
/ 24 сентября 2010

У меня есть пользовательское поле, которое я загружаю из URL.Я хотел бы, чтобы поле не занимало места, а затем, когда изображение загружено, изменяет его размер до размера изображения.У меня почти все сделано, но я не могу найти способ сделать макет заново после загрузки изображения.Это работает, если я укажу размер изображения заранее.Вызов invalidateLayout для родителя не будет работать, так как экран виден, но просто вызов invalidate ничего не делает.Какие шаги мне нужно пройти, чтобы изменить размер поля?

Было бы также предпочтительнее, если бы я мог вызывать метод в пользовательском представлении, а не в родительском, но это не обязательно.* Это для Blackberry 4.5.0.

1 Ответ

1 голос
/ 08 октября 2010

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

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

  • Когда ваше пользовательское поле завершит загрузку изображения, вызовите родительский менеджер, чтобы сделать недействительными все поля в нем (вам нужно будет сохранить ссылку на родительский менеджер в вашем пользовательском поле)-
    • создать объект настраиваемого поля, не добавляя его в менеджер.Начните загружать ваше изображение, когда это будет сделано, вызовите специфичный для родителей метод, который добавит настраиваемое поле в менеджер (вам все равно придется хранить ссылку на родительский менеджер в вашем настраиваемом поле) (вы можете использовать insert, если хотитедобавить его между двумя уже присутствующими на диспетчере полями).Таким образом, вам не нужно изменять размер поля, а только добавить его к менеджеру, когда оно будет готово к показу.

    Ответ на ваш комментарий:

    Затем вы должны использовать синхронизированную область:

    synchronized(UiApplication.getUiApplication().getEventLock())) {  
        // UI Code here  
    }  
    

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

...