react-native-navigation的迁移库

ElementViewManager.java 1.5KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package com.reactnativenavigation.react;
  2. import com.facebook.react.uimanager.ThemedReactContext;
  3. import com.facebook.react.uimanager.ViewGroupManager;
  4. import com.facebook.react.uimanager.annotations.ReactProp;
  5. import com.reactnativenavigation.views.element.Element;
  6. import static com.reactnativenavigation.utils.UiUtils.runOnPreDrawOnce;
  7. import static com.reactnativenavigation.utils.ViewUtils.performOnParentReactView;
  8. public class ElementViewManager extends ViewGroupManager<Element> {
  9. @Override
  10. public String getName() {
  11. return "RNNElement";
  12. }
  13. @Override
  14. protected Element createViewInstance(ThemedReactContext reactContext) {
  15. Element element = createView(reactContext);
  16. register(element);
  17. return element;
  18. }
  19. public Element createView(ThemedReactContext reactContext) {
  20. return new Element(reactContext);
  21. }
  22. @Override
  23. public void onDropViewInstance(Element element) {
  24. super.onDropViewInstance(element);
  25. unregister(element);
  26. }
  27. @ReactProp(name = "elementId")
  28. public void setElementId(Element element, String id) {
  29. element.setElementId(id);
  30. }
  31. @Override
  32. public boolean needsCustomLayoutForChildren() {
  33. return true;
  34. }
  35. private void register(Element element) {
  36. runOnPreDrawOnce(element, () -> performOnParentReactView(element, (parent) -> parent.registerElement(element)));
  37. }
  38. private void unregister(Element element) {
  39. performOnParentReactView(element, (parent) -> parent.unregisterElement(element));
  40. }
  41. }