4

データをフェッチし、既存のレンダリング フレームワークを使用して表示する Android コンポーネントをラップするネイティブ UI コンポーネントを実装しようとしています ( を使用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、Adapter によって生成されたすべてのビューが含まれます。これには、非同期的にロードされるイメージ ビューが含まれます。

ShadowNodeメジャー関数で を返す、または の参照を保持してShadowNodeを呼び出すなど、いくつかのことを試しましdirty()た。

これを行う正しい方法は何ですか?残念ながら、「リポジトリを確認する」以外の非常に複雑なコンポーネントを扱うドキュメントや例は見つかりませんでした...

4

1 に答える 1

1

グループで試着できview.invalidate()ます。プレースホルダーの画像ビューを削除して、正しい画像を含む新しいビューを追加することもできます。

ただし、画像ビューを更新するだけの場合は、ボレー、ピカソ、グライドなどを使用して画像ビュー自体を処理することもできます。

于 2018-03-13T14:34:24.470 に答える