I have 1 Activity
and 3 fragments
they're FirstFragment
, SecondFragment
& ThirdFragment
respectively.
FirstFragment
loads automatically when MainActivity
is open.
SecondFragment
loads by Button click of FirstFragment
with addToBackStack
flag. same thing goes with ThirdFragment
.
Now, suppose user closes the app when SecondFragment
is displaying on its screen, than when user opens the app again, he should directly switch to SecondFragment
(internally FirstFragment
loads than SecondFragment
loads with addToBacStack
flag).
How to achieve this?
Here's some code. currently, I'm unable to load multiple fragment.
SharePreferences
for current displaying fragment
.
public class PrefsMain {
public static final String TAG = Prefs.class.getSimpleName();
// Strings contains Fragment names BEGIN
public static final String CurrentFragment_RoleSelectionFragment =
RoleSelectionFragment.TAG;
public static final String CurrentFragment_CheckInOutFragment =
CheckInOutFragment.TAG;
public static final String CurrentFragment_TeacherRegFragment =
TeacherRegFragment.TAG;
public static final String CurrentFragment_StudentSelectionFragment =
StudentSelectionFragment.TAG;
public static final String CurrentFragment_StudentFragment =
StudentFragment.TAG;
public static final String CurrentFragment_StudentRegistrationFragment =
StudentRegistrationFragment.TAG;
public static final String CurrentFragment_DiagnoseFragment =
DiagnoseFragment.TAG;
// Strings contains Fragment names END
// SharedPreferences KEY
private static final String CurrentFragment = "Fragment";
private SharedPreferences mPrefs;
public PrefsMain(Context context) {
mPrefs = context.getSharedPreferences(TAG, Context.MODE_PRIVATE);
}
// Getter - Setter
public String getCurrentFragment() {
return mPrefs.getString(CurrentFragment, CurrentFragment_RoleSelectionFragment);
}
public void setCurrentFragment(String currentFragment) {
mPrefs.edit().putString(CurrentFragment, currentFragment).apply();
}
}
MainAvtivity.java
import static com.odoo.addons.employees.utils.PrefsMain.CurrentFragment_CheckInOutFragment;
import static com.odoo.addons.employees.utils.PrefsMain.CurrentFragment_DiagnoseFragment;
import static com.odoo.addons.employees.utils.PrefsMain.CurrentFragment_RoleSelectionFragment;
import static com.odoo.addons.employees.utils.PrefsMain.CurrentFragment_StudentFragment;
import static com.odoo.addons.employees.utils.PrefsMain.CurrentFragment_StudentRegistrationFragment;
import static com.odoo.addons.employees.utils.PrefsMain.CurrentFragment_StudentSelectionFragment;
import static com.odoo.addons.employees.utils.PrefsMain.CurrentFragment_TeacherRegFragment;
public class MainActivity extends AppCompatActivity {
public static final String TAG = MainActivity.class.getSimpleName();
private PrefsMain mPrefsMain;
private AppCompatActivity mActivity;
private RoleSelectionFragment mRoleSelectionFragment;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mActivity = this;
mPrefsMain = new PrefsMain(this);
}
@Override
protected void onPostCreate(@Nullable Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
// simply get the fragment name from `SharedPreferences`.
// and loads it
final String currentFragment = mPrefsMain.getCurrentFragment();
if (currentFragment.equals(CurrentFragment_RoleSelectionFragment)) {
loadFragment(RoleSelectionFragment.newInstance(),
RoleSelectionFragment.TAG);
} else if (currentFragment.equals(CurrentFragment_CheckInOutFragment)) {
loadFragment(CheckInOutFragment.newInstance(),
CheckInOutFragment.TAG);
} else if (currentFragment.equals(CurrentFragment_TeacherRegFragment)) {
loadFragment(TeacherRegFragment.newInstance(),
TeacherRegFragment.TAG);
} else if (currentFragment.equals(CurrentFragment_StudentSelectionFragment)) {
loadFragment(StudentSelectionFragment.newInstance(),
StudentSelectionFragment.TAG);
} else if (currentFragment.equals(CurrentFragment_StudentFragment)) {
loadFragment(StudentFragment.newInstance(),
StudentFragment.TAG);
} else if (currentFragment.equals(CurrentFragment_StudentRegistrationFragment)) {
loadFragment(StudentRegistrationFragment.newInstance(),
StudentRegistrationFragment.TAG);
} else if (currentFragment.equals(CurrentFragment_DiagnoseFragment)) {
loadFragment(DiagnoseFragment.newInstance(),
DiagnoseFragment.TAG);
}
}
public void loadFragment(Fragment fragment, String TAG) {
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.flMain, fragment, TAG)
.commit();
}
}
<br/ ><br/ >
Above implementation just loads the last known fragment
but, it doesn't perform addToBackStack
for its parent fragments
.
You are not adding the transaction to backstack. Add your transaction to backstack.
public void loadFragment(Fragment fragment, String TAG) {
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.flMain, fragment, TAG)
.addToBackStack(TAG)
.commit();
}