Search code examples
androidconductor

Back stack handling in Conductor


I try to use Conductor library but have a problem with backstack. I have an activity with 4 buttons in bottom navigation panel. Each of the buttons in ACTIVITY opens 1 of the 4 controllers: - today news (root controller) - trending news - market news - regulatory news

I need to add all controlers to backstack, and when i tap on the back button i must return to previous controller. For example: Today -> Market -> Trending If i tap on the back button in Trending controller, i must to return to Market e.t.c. But now activity is closing when i tap on the back in any controller. How can i implement this behavior? This is the code in my activity:

    @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()));
}

Solution

  • I guess you just forget to handle onBackPressed() in your Activity

    router.handleBack() dealing with backstack navigation, so router pops backstack if this method called and returns true, othervise (e.g backstack is empty) it returns false

    @Override
    public void onBackPressed() {
        if (!router.handleBack()) {
            super.onBackPressed();
        }
    }