react-native-navigation的迁移库

ContentView.java 2.3KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package com.reactnativenavigation.views;
  2. import android.content.Context;
  3. import android.view.View;
  4. import com.facebook.react.ReactRootView;
  5. import com.reactnativenavigation.NavigationApplication;
  6. import com.reactnativenavigation.params.NavigationParams;
  7. import com.reactnativenavigation.react.ReactViewHacks;
  8. import com.reactnativenavigation.screens.SingleScreen;
  9. import com.reactnativenavigation.utils.ViewUtils;
  10. public class ContentView extends ReactRootView {
  11. private final String screenId;
  12. private final NavigationParams navigationParams;
  13. boolean isContentVisible = false;
  14. private SingleScreen.OnDisplayListener onDisplayListener;
  15. public ContentView(Context context, String screenId, NavigationParams navigationParams) {
  16. super(context);
  17. this.screenId = screenId;
  18. this.navigationParams = navigationParams;
  19. attachToJS();
  20. }
  21. public String getNavigatorEventId() {
  22. return navigationParams.navigatorEventId;
  23. }
  24. public void preventUnmountOnDetachedFromWindow() {
  25. ReactViewHacks.preventUnmountOnDetachedFromWindow(this);
  26. }
  27. public void ensureUnmountOnDetachedFromWindow() {
  28. ReactViewHacks.ensureUnmountOnDetachedFromWindow(this);
  29. }
  30. public void preventMountAfterReattachedToWindow() {
  31. ReactViewHacks.preventMountAfterReattachedToWindow(this);
  32. }
  33. @Override
  34. public void onViewAdded(final View child) {
  35. super.onViewAdded(child);
  36. detectContentViewVisible(child);
  37. }
  38. private void detectContentViewVisible(View child) {
  39. if (onDisplayListener != null) {
  40. ViewUtils.runOnPreDraw(child, new Runnable() {
  41. @Override
  42. public void run() {
  43. if (!isContentVisible) {
  44. isContentVisible = true;
  45. onDisplayListener.onDisplay();
  46. onDisplayListener = null;
  47. }
  48. }
  49. });
  50. }
  51. }
  52. private void attachToJS() {
  53. startReactApplication(NavigationApplication.instance.getReactGateway().getReactInstanceManager(), screenId,
  54. navigationParams.toBundle());
  55. }
  56. public void setOnDisplayListener(SingleScreen.OnDisplayListener onDisplayListener) {
  57. this.onDisplayListener = onDisplayListener;
  58. }
  59. }