react-native-navigation的迁移库

ModalController.java 1.6KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package com.reactnativenavigation.controllers;
  2. import android.app.Activity;
  3. import com.reactnativenavigation.layouts.ScreenStackContainer;
  4. import com.reactnativenavigation.params.ScreenParams;
  5. import java.util.Stack;
  6. public class ModalController implements ScreenStackContainer, Modal.OnModalDismissedListener {
  7. private final Activity activity;
  8. private Stack<Modal> stack = new Stack<>();
  9. public ModalController(Activity activity) {
  10. this.activity = activity;
  11. }
  12. public void showModal(ScreenParams screenParams) {
  13. Modal modal = new Modal(activity, this, screenParams);
  14. modal.show();
  15. stack.add(modal);
  16. }
  17. public void dismissTopModal() {
  18. if (isShowing()) {
  19. stack.pop().dismiss();
  20. }
  21. }
  22. public void dismissAllModals() {
  23. while (isShowing()) {
  24. dismissTopModal();
  25. }
  26. }
  27. public boolean isShowing() {
  28. return !stack.empty();
  29. }
  30. public void push(ScreenParams params) {
  31. stack.peek().push(params);
  32. }
  33. @Override
  34. public void pop(ScreenParams screenParams) {
  35. stack.peek().pop(screenParams);
  36. }
  37. @Override
  38. public void popToRoot(ScreenParams params) {
  39. stack.peek().popToRoot(params);
  40. }
  41. @Override
  42. public void newStack(ScreenParams params) {
  43. stack.peek().newStack(params);
  44. }
  45. @Override
  46. public void destroy() {
  47. for (Modal modal : stack) {
  48. modal.destroy();
  49. modal.dismiss();
  50. }
  51. stack.clear();
  52. }
  53. @Override
  54. public void onModalDismissed(Modal modal) {
  55. stack.remove(modal);
  56. }
  57. }