У меня есть 1 Activity
и 3 fragments
они FirstFragment
, SecondFragment
& ThirdFragment
соответственно.загружать несколько фрагментов и добавить его в backstack андроида
FirstFragment
загружается автоматически, когда MainActivity
открыт. SecondFragment
Загрузка по кнопке FirstFragment
с addToBackStack
флаг. То же самое происходит с ThirdFragment
.
Теперь, предположим, что пользователь закрывает приложение, когда SecondFragment
отображает на своем экране, чем когда пользователь открывает приложение снова, он должен напрямую перейти к SecondFragment
(внутренне FirstFragment
нагрузок, чем SecondFragment
нагрузок с addToBacStack
флагом).
Как достичь этого?
Вот код. В настоящее время я не могу загрузить несколько фрагментов.
SharePreferences
для текущего отображения 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();
}
}
Над реализацией просто загружает последний известный fragment
, но он не выполняет addToBackStack
для своего родителя fragments
.
Любые предложения или помощь будут оценены. Заранее спасибо.
попробуйте добавить андроид: alwaysRetainTaskState = «истина» в деятельности тег MainActivity в манифесте –
Что вы имеете в виду тесного приложения ... Убейте его и вернуться снова? –