4

我们正在尝试实现一个原生 UI 组件,它封装了一个 Android 组件,该组件使用我们现有的渲染框架(使用AdapterView)获取数据并显示它。我们事先并不知道数据会是什么,所以这个组件的高度和内容完全是任意的。这大部分都可以正常工作,除了渲染组件异步请求其他内容(例如图像)的情况。在这种情况下,图像被检索,ImageView被“显示”,但 UI 最终什么也没有显示(字面意思似乎是适当大小的透明视图)。

我们知道这些视图在普通的 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带有度量函数的 a ,或者保留对 theShadowNode和调用的引用dirty()等。

这样做的正确方法是什么?不幸的是,除了“检查回购”之外,我们还没有找到处理真正复杂组件的文档或示例......

4

1 回答 1

1

你可以在群里试试view.invalidate()。您还可以删除占位符图像视图并添加具有正确图像的更新视图。

但是,如果它只是刷新图像视图,您还可以使用诸如凌空、毕加索、滑翔等之类的东西来处理图像视图本身。

于 2018-03-13T14:34:24.470 回答