Собственные компоненты пользовательского интерфейса - обновлять при обновлении представлений Android
Мы пытаемся реализовать собственный компонент пользовательского интерфейса, который оборачивает компоненты Android, которые извлекают данные и отображают их, используя нашу существующую среду рендеринга (используя AdapterView
). Мы не знаем, какие данные будут заранее, поэтому высота и содержание этого компонента абсолютно произвольны. Это в основном работает нормально, за исключением случая, когда визуализированные компоненты запрашивают что-то еще асинхронно (например, изображения). В этом случае изображение извлекается, ImageView
"отображается", но пользовательский интерфейс ничего не показывает (буквально кажется прозрачным представлением соответствующего размера).
Мы знаем, что эти представления прекрасно работают в обычном Android, но нам, похоже, не хватает чего-то, что говорит RN/Yoga, что он должен повторно визуализироваться при загрузке изображений с сервера, чтобы они правильно отображались. Вот более или менее, как это выглядит:
public class ReactServerListComponent extends SimpleViewManager<LinearLayoutExtension> {
private static final String REACT_CLASS = "TAReactServerListComponent";
@Override
public String getName() {
return REACT_CLASS;
}
...
@ReactProp(name = "link")
public void setLink(final LinearLayoutExtension view, String theNewLink){
//async loader logic invokes this on success
view.loadRetrievedEntries(newEntries);
}
...
}
В этом случае LinearLayoutExtension
содержит все представления, созданные адаптером, который, в свою очередь, будет содержать асинхронно загружаемые представления изображений.
Мы попробовали несколько вещей, таких как возвращение ShadowNode
с функцией измерения или сохраняя ссылку на ShadowNode
и звонит dirty()
и т. д. на нем.
Как правильно это сделать? К сожалению, мы не нашли документацию или примеры, которые имеют дело с действительно сложными компонентами, кроме "проверить репо"...
1 ответ
Вы могли бы попробовать view.invalidate()
на группу. Вы также можете удалить заполнитель imageview и добавить более новый вид с правильным изображением.
Однако, если это только обновляет вид изображения, вы также можете использовать что-то вроде залпа, Пикассо, Глайда и т. Д., Чтобы позаботиться о самом виде изображения.