BamsBamx
BamsBamx

Reputation: 4256

Need suggestions with ActionBar, Navigation Drawer and back stack

I have an ActionBar activity. In this activity I have implemented Navigation Drawer from Android API.

One option of navigation drawer set a ListFragment with some elements inside its list.

When I click some elements I want to create a new fragment and set previous ListFragment to the stack. Also I want to destroy this new fragment by clicking ActionBar home button, in order to return to the previous ListFragment.

My problem comes here: When I click home button of the actionbar, drawer layout is displayed, instead of destroy the fragment... What should I do?

I have Overriden onOptionsItemSelected method in the fragment:

@Override
    public boolean onOptionsItemSelected(MenuItem menuItem) {
        switch (menuItem.getItemId()) {
            case android.R.id.home:
                getFragmentManager()
                        .popBackStack();
        }
        return (super.onOptionsItemSelected(menuItem));

    }

Also I have set ListFragment to the backstack when Inflating the new fragment:

getFragmentManager()
                .beginTransaction()
                .setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right)
                .replace(R.id.activity_main_fragment_container, fragment)
                .addToBackStack(null)
                .commit();

Upvotes: 2

Views: 1006

Answers (1)

Bianca Daniciuc
Bianca Daniciuc

Reputation: 930

Well, as the docs say here, popBackStack() is async. I suppose that the drawer layout is displayed because you call super.onOptionsItemSelected(menuItem).

I suggest you to return true for all cases you handle this selection by yourself (in this specific situation: case android.R.id.home:), and call getActivity().onBackPressed() (assuming that by pressing hardware back button the last fragment gets removed, as it should) instead of popping back stack directly. I've implemented a similar solution and it works for me.

Upvotes: 1

Related Questions