casolorz
casolorz

Reputation: 9574

Fragment blank after popBackStack

I have this Activity in which I replace the main fragment with a preference fragment. When I click back after looking at the preferences, I get a blank (white) area where my fragment should be. If I rotate the screen then it works just fine. Everything in my fragment appears to be ok except for it is blank. Here are my methods:

The onCreate method of the activity.

 @Override
    protected void onCreate(Bundle savedInstanceState) {
          .....
        if (savedInstanceState == null) {

          getFragmentManager().beginTransaction()
                    .add(MAIN_CONTAINER, new MainFragment())
                    .commit();
        }
    }

The starting of the preferences fragment:

public void startPreferencesFragment() {
        FragmentManager mFragmentManager = getFragmentManager();
        FragmentTransaction mFragmentTransaction = mFragmentManager
                .beginTransaction();
        MyPreferencesFragment mPrefsFragment = new MyPreferencesFragment();
        mFragmentTransaction.addToBackStack(null)
                .replace(MAIN_CONTAINER, mPrefsFragment)
                .commit();
    }

The onBackPressed of my activity:

@Override
    public void onBackPressed() {

        FragmentManager fm = getFragmentManager();

        if (fm.getBackStackEntryCount() > 0) {
            fm.popBackStack();

            return;

        }else {
            super.onBackPressed();
        }
    }

So what am I doing wrong?

Thanks.

EDIT: If I open preferences and then rotate and then press back, it all works fine.

Also I should mention that removing the onBackPressed method does not fix the issue, it just exits the app.

EDIT: Turned out to not be a problem with the fragment back stack at all. Basically my fragment has a recyclerview and that is all it has. The instance of the adapter I was setting on the recyclerview was being kept while the recyclerview itself was new when the fragment was brought back from the back stack and I was checking whether the adapter was null when setting it.

Upvotes: 4

Views: 4209

Answers (1)

Emmanuel
Emmanuel

Reputation: 13223

You are already adding the transaction to the backstack, there is not need to override onBackPressed(); the framework will pop the Fragment out of the stack automatically when the back button is pressed. I am pretty sure that you are "double" popping the backstack.

Upvotes: 3

Related Questions