react-native-navigation的迁移库

SingleScreenLayout.java 2.3KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. package com.reactnativenavigation.layouts;
  2. import android.content.Context;
  3. import android.view.View;
  4. import android.widget.FrameLayout;
  5. import com.reactnativenavigation.params.ScreenParams;
  6. import com.reactnativenavigation.params.TitleBarButtonParams;
  7. import java.util.List;
  8. import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
  9. public class SingleScreenLayout extends FrameLayout implements Layout {
  10. private final ScreenParams screenParams;
  11. private ScreenStack stack;
  12. public SingleScreenLayout(Context context, ScreenParams screenParams) {
  13. super(context);
  14. this.screenParams = screenParams;
  15. createStack(context);
  16. }
  17. private void createStack(Context context) {
  18. if (stack != null) {
  19. stack.destroy();
  20. removeView(stack);
  21. }
  22. stack = new ScreenStack(context, screenParams);
  23. addView(stack, new LayoutParams(MATCH_PARENT, MATCH_PARENT));
  24. }
  25. @Override
  26. public boolean onBackPressed() {
  27. if (stack.canPop()) {
  28. stack.pop();
  29. return true;
  30. } else {
  31. return false;
  32. }
  33. }
  34. @Override
  35. public void onDestroy() {
  36. stack.destroy();
  37. }
  38. @Override
  39. public void removeAllReactViews() {
  40. stack.destroy();
  41. }
  42. @Override
  43. public void push(ScreenParams params) {
  44. stack.push(params);
  45. }
  46. @Override
  47. public void pop(ScreenParams params) {
  48. stack.pop();
  49. }
  50. @Override
  51. public void popToRoot(ScreenParams params) {
  52. stack.popToRoot();
  53. }
  54. @Override
  55. public void newStack(ScreenParams params) {
  56. createStack(getContext());
  57. }
  58. @Override
  59. public void setTopBarVisible(String screenInstanceID, boolean visible, boolean animate) {
  60. stack.setTopBarVisible(screenInstanceID, visible, animate);
  61. }
  62. @Override
  63. public void setTitleBarTitle(String screenInstanceId, String title) {
  64. stack.setTitleBarTitle(screenInstanceId, title);
  65. }
  66. @Override
  67. public View asView() {
  68. return this;
  69. }
  70. @Override
  71. public void setTitleBarButtons(String screenInstanceId, String navigatorEventId, List<TitleBarButtonParams> titleBarButtons) {
  72. stack.setTitleBarButtons(screenInstanceId, navigatorEventId, titleBarButtons);
  73. }
  74. }