Обработка заднего стека в проводнике

Я пытаюсь использовать библиотеку Conductor, но у меня проблема с backstack. У меня есть активность с 4 кнопками в нижней панели навигации. Каждая из кнопок в ACTIVITY открывает 1 из 4 контроллеров: - сегодняшние новости (корневой контроллер) - трендовые новости - новости рынка - регуляторные новости

Мне нужно добавить все контроллеры в backstack, и когда я нажимаю на кнопку назад, я должен вернуться к предыдущему контроллеру. Например: Сегодня -> Рынок -> Тенденция Если я нажимаю на кнопку "Назад" в контроллере "Тенденции", я должен вернуться на "Маркет" и т. Д. Но теперь активность закрывается, когда я нажимаю на спину в любом контроллере. Как я могу реализовать это поведение? Это код в моей деятельности:

    @Override
public void navigateToMarketHighlights() {
    MarketHighlightsController marketHighlightsController = new MarketHighlightsController();

    router.pushController(RouterTransaction.with(marketHighlightsController)
            .popChangeHandler(new FadeChangeHandler())
            .pushChangeHandler(new FadeChangeHandler()));
}

@Override
public void navigateToTrendingNow() {
    TrendingNowController trendingNowController = new TrendingNowController();

    router.pushController(RouterTransaction.with(trendingNowController)
            .popChangeHandler(new FadeChangeHandler())
            .pushChangeHandler(new FadeChangeHandler()));
}

@Override
public void navigateToTodayView() {
    TodayController todayController = new TodayController();

    router.pushController(RouterTransaction.with(todayController)
            .popChangeHandler(new FadeChangeHandler())
            .pushChangeHandler(new FadeChangeHandler()));
}

@Override
public void navigateToRegulatoryUpdatesView() {
    RegulatoryUpdatesController regulatoryUpdatesController = new RegulatoryUpdatesController();
    router.pushController(RouterTransaction.with(regulatoryUpdatesController)
            .popChangeHandler(new FadeChangeHandler())
            .pushChangeHandler(new FadeChangeHandler()));
}

1 ответ

Решение

Я думаю, вы просто забыли справиться onBackPressed() в вашем Activity

router.handleBack() работа с backstack навигацией, поэтому маршрутизатор выдает backstack, если этот метод вызван и возвращает true, othervise (например, backstack пуст) возвращает false

@Override
public void onBackPressed() {
    if (!router.handleBack()) {
        super.onBackPressed();
    }
}
Другие вопросы по тегам