react-native-navigation的迁移库

SnackbarAndFabContainer.java 2.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package com.reactnativenavigation.views;
  2. import android.content.Context;
  3. import android.support.design.widget.CoordinatorLayout;
  4. import com.reactnativenavigation.events.Event;
  5. import com.reactnativenavigation.events.EventBus;
  6. import com.reactnativenavigation.events.FabSetEvent;
  7. import com.reactnativenavigation.events.ScreenChangedEvent;
  8. import com.reactnativenavigation.events.Subscriber;
  9. import com.reactnativenavigation.layouts.Layout;
  10. import com.reactnativenavigation.params.FabParams;
  11. import com.reactnativenavigation.params.SnackbarParams;
  12. import com.reactnativenavigation.screens.Screen;
  13. import java.util.EmptyStackException;
  14. public class SnackbarAndFabContainer extends CoordinatorLayout implements Snakbar.OnDismissListener, Subscriber{
  15. private Snakbar snakbar;
  16. private FloatingActionButtonCoordinator fabCoordinator;
  17. private Layout layout;
  18. public SnackbarAndFabContainer(Context context, Layout layout) {
  19. super(context);
  20. this.layout = layout;
  21. fabCoordinator = new FloatingActionButtonCoordinator(this);
  22. EventBus.instance.register(this);
  23. }
  24. public void showSnackbar(final String navigatorEventId, final SnackbarParams params) {
  25. snakbar = new Snakbar(this, navigatorEventId, params);
  26. snakbar.show();
  27. }
  28. @Override
  29. public void onDismiss(Snakbar snakbar) {
  30. if (this.snakbar == snakbar) {
  31. this.snakbar = null;
  32. }
  33. }
  34. public void destroy() {
  35. EventBus.instance.unregister(this);
  36. }
  37. @Override
  38. public void onEvent(Event event) {
  39. if (ScreenChangedEvent.TYPE.equals(event.getType())) {
  40. onScreenChange(((ScreenChangedEvent) event).fabParams);
  41. }
  42. if (FabSetEvent.TYPE.equals(event.getType())) {
  43. updateFab(((FabSetEvent) event).fabParams);
  44. }
  45. }
  46. private void onScreenChange(FabParams fabParams) {
  47. dismissSnackbar();
  48. updateFab(fabParams);
  49. }
  50. public void dismissSnackbar() {
  51. if (snakbar != null) {
  52. snakbar.dismiss();
  53. snakbar = null;
  54. }
  55. }
  56. private void updateFab(final FabParams fabParams) {
  57. fabCoordinator.remove(new Runnable() {
  58. @Override
  59. public void run() {
  60. if (fabParams != null) {
  61. Screen currentScreen = null;
  62. try {
  63. currentScreen = layout.getCurrentScreen();
  64. } catch(EmptyStackException exception) {
  65. currentScreen = null;
  66. }
  67. if (currentScreen != null && currentScreen.getScreenInstanceId().equals(fabParams.screenInstanceId)) {
  68. fabCoordinator.add(fabParams);
  69. }
  70. }
  71. }
  72. });
  73. }
  74. }