переходы возлагается на презентер В презентере не должно быть импортов из Android Framework, например, Context import android.content.Context import android.content.res.Resources class UsersPresenter { ... }
переходы возлагается на презентер В презентере не должно быть импортов из Android Framework, например, Context import android.content.Context import android.content.res.Resources class UsersPresenter { ... }
на фрагменты (т.е. есть также поддержка переходов между Activity) • Не фреймворк • Короткие вызовы • Легка в расширении • Не зависит от жизненного цикла!
перехода, которую выполняет Navigator Navigator – реализация «переключения экранов» внутри контейнера (для фрагментов) и Activity. Router - класс, которому передаем команды для выполнения перехода
перехода, которую выполняет Navigator Navigator – реализация «переключения экранов» внутри контейнера (для фрагментов) и Activity. Router - класс, которому передаем команды для выполнения перехода CommandBuffer – отвечает за сохранность вызванных команд навигации, если нет возможности сразу выполнить переход
достаточно указать его экран (Screen) R обозначен корневой экран приложения При вызове на корневом экране ожидается выход из приложения public BackTo(Screen screen) { this.screen = screen; }
getClass().getCanonicalName(); public String getScreenKey() { return screenKey; } } public abstract class SupportAppScreen extends Screen { public Fragment getFragment() { return null; } public Intent getActivityIntent(Context context) { return null; } } public class UsersScreen extends SupportAppScreen { public Fragment getFragment() { return new UsersFragment(); } } Реализация:
новый экран public void navigateTo(Screen screen) { executeCommands(new Forward(screen)); } // Очищает все экраны и открывает новый корневой public void newRootScreen(Screen screen) { executeCommands( new BackTo(null), new Replace(screen) ); } }
новый экран public void navigateTo(Screen screen) { executeCommands(new Forward(screen)); } // Очищает все экраны и открывает новый корневой public void newRootScreen(Screen screen) { executeCommands( new BackTo(null), new Replace(screen) ); } // Замена текущего экрана public void replaceScreen(Screen screen) { executeCommands(new Replace(screen)); } }
новый экран public void navigateTo(Screen screen) { executeCommands(new Forward(screen)); } // Очищает все экраны и открывает новый корневой public void newRootScreen(Screen screen) { executeCommands( new BackTo(null), new Replace(screen) ); } // Замена текущего экрана public void replaceScreen(Screen screen) { executeCommands(new Replace(screen)); } // Возврат на любой экран в цепочке public void backTo(Screen screen) { executeCommands(new BackTo(screen)); } }
несколько экранов внутри одной транзакции public void newChain(Screen... screens) { ... } // Очищает стек и открывает несколько экранов внутри 1-й транзакции public void newRootChain(Screen... screens) { ... } }
несколько экранов внутри одной транзакции public void newChain(Screen... screens) { ... } // Очищает стек и открывает несколько экранов внутри 1-й транзакции public void newRootChain(Screen... screens) { ... } // Удаляет все экраны из цепочки и выход (из приложения) public void finishChain() { executeCommands( new BackTo(null), new Back() ); } }
несколько экранов внутри одной транзакции public void newChain(Screen... screens) { ... } // Очищает стек и открывает несколько экранов внутри 1-й транзакции public void newRootChain(Screen... screens) { ... } // Удаляет все экраны из цепочки и выход (из приложения) public void finishChain() { executeCommands( new BackTo(null), new Back() ); } // Возвращает на предыдущий экран в цепочке public void exit() { executeCommands(new Back()); } }