Fix back navigation from initial fragment
Clicking on the hardware back button while the initial fragment was
shown resulted in showing an empty screen and only on a second click
the app was moved to the background.
This was because the initial fragment was wrongly added to the back
stack.
Change-Id: I482842b8a578c715ce5ee0d1396b3e683d098b16
Signed-off-by: Edwin Kempin <ekempin@google.com>
diff --git a/app/src/main/java/com/google/reviewit/MainActivity.java b/app/src/main/java/com/google/reviewit/MainActivity.java
index 4960f72..13705fd 100644
--- a/app/src/main/java/com/google/reviewit/MainActivity.java
+++ b/app/src/main/java/com/google/reviewit/MainActivity.java
@@ -22,6 +22,7 @@
import android.support.annotation.StringRes;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
+import android.support.v4.app.FragmentTransaction;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.widget.Toolbar;
@@ -139,15 +140,15 @@
});
if (getApp().getPrefs().showIntro) {
- displayView(new IntroFragment1());
+ displayInitialView(new IntroFragment1());
} else if (savedInstanceState == null) {
switch (getApp().getPrefs().startScreen) {
case REVIEW_SCREEN:
- displayView(1);
+ displayInitialView(newFragmentInstance(items.get(1).fragmentClass));
break;
case SORT_SCREEN:
default:
- displayView(0);
+ displayInitialView(newFragmentInstance(items.get(0).fragmentClass));
break;
}
}
@@ -173,12 +174,24 @@
drawer.closeDrawer(list);
}
+ private void displayInitialView(Fragment fragment) {
+ displayView(fragment, false);
+ }
+
private void displayView(Fragment fragment) {
+ displayView(fragment, true);
+ }
+
+ private void displayView(Fragment fragment, boolean addToBackStack) {
FragmentManager fragmentManager = getSupportFragmentManager();
- fragmentManager.beginTransaction()
- .replace(R.id.mainFrame, fragment)
- .addToBackStack(null)
- .commit();
+ FragmentTransaction t = fragmentManager.beginTransaction()
+ .replace(R.id.mainFrame, fragment);
+
+ if (addToBackStack) {
+ t.addToBackStack(null);
+ }
+
+ t.commit();
}
private Fragment newFragmentInstance(