Advertisement
Guest User

Untitled

a guest
Nov 19th, 2019
164
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.60 KB | None | 0 0
  1. Далее заглянем под капот - MvpPresenter - >
  2.  
  3. экземпляр ViewState хранит в себе список команд, которые были переданы из Presenter во View.
  4. доступ к ViewState можно получить из метода getViewState
  5. тут хранятся состояния view - >
  6. public View getViewState() {
  7. return mViewStateAsView;
  8. }
  9.  
  10. //
  11. public MvpPresenter() {
  12. Binder.bind(this);
  13.  
  14. mViews = Collections.newSetFromMap(new WeakHashMap<View, Boolean>());
  15. }
  16. сохраняет состояние view в WeakHashMap
  17.  
  18. Во View происходит событие  которое передаётся в Presenter
  19. привязывания View от Presenter
  20. public void attachView(View view) {
  21. if (mViewState != null) {
  22. //
  23. тут Presenter передаёт команду во ViewState
  24. mViewState.attachView(view);
  25. } else {
  26. ViewState складывает команду в очередь команд, после чего передаёт её во View
  27. mViews.add(view);
  28. }
  29. if (mFirstLaunch) {
  30. mFirstLaunch = false;
  31. //подробное описание и зачем нужен метод в конце письма
  32. onFirstViewAttach();
  33. }
  34. }
  35. //отвязываем view от presentor
  36. public void detachView(View view) {
  37. if (mViewState != null) {
  38. mViewState.detachView(view);
  39. } else {
  40. mViews.remove(view);
  41. }
  42. }
  43. //подробное описание и зачем нужен метод в конце письма
  44. @SuppressWarnings("WeakerAccess")
  45. public Set<View> getAttachedViews() {
  46. if (mViewState != null) {
  47. return mViewState.getViews();
  48. }
  49.  
  50. return mViews;
  51. }
  52. @SuppressWarnings("WeakerAccess")
  53. public View getViewState() {
  54. return mViewStateAsView;
  55. }
  56. // для чего нужен ->
  57.  
  58. Например, если это свежая команда, то нужно применить команду с анимацией.
  59. метод
  60.  который сообщит вам, в каком состоянии находится конкретная View и тут мы понимаем стоит применять анимацию или нет
  61. @SuppressWarnings("unused")
  62. public boolean isInRestoreState(View view) {
  63. //noinspection SimplifiableIfStatement
  64. if (mViewState != null) {
  65. return mViewState.isInRestoreState(view);
  66. }
  67. return false;
  68. }
  69.  
  70. @SuppressWarnings({"unchecked", "unused"})
  71. public void setViewState(MvpViewState<View> viewState) {
  72. mViewStateAsView = (View) viewState;
  73. mViewState = (MvpViewState) viewState;
  74. }
  75.  
  76. private static class Binder {
  77. static void bind(MvpPresenter presenter) {
  78. MvpView viewState = (MvpView) MoxyReflector.getViewState(presenter.getClass());
  79.  
  80. presenter.mViewStateAsView = viewState;
  81. presenter.mViewState = (MvpViewState) viewState;
  82. }
  83. }
  84.  
  85. protected void onFirstViewAttach() {
  86. }
  87.  Этот метод вызывается тогда, когда к конкретному экземпляру Presenter первый раз будет привязана любая View. А когда к этому Presenter будет привязана другая View, к ней уже будет применено состояние из ViewState. И здесь уже не важно, эта новая View – совсем другая View, или пересозданная в результате смены конфигурации. Этот метод подходит для того, чтобы, например, загрузить список новостей при первом открытии экрана списка новостей.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement