برای اینکه وضعیت یه فرگمنت رو بهشکل صحیح ذخیره کنین، باید این کارها رو انجام بدین:
1- توی فرگمنت، وضعیت شئ ایجادشده از اون رو با رونویسی متد onSaveInstanceState ذخیره کنین و توی onActivityCreated بازیابی کنین:
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
...
if (savedInstanceState != null) {
//Restore the fragment's state here
}
}
...
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
//Save the fragment's state here
}
توضیح: برای ذخیرهکردن و بازیابی وضعیت میتونین از متغیرهای public static (مثلاً توی کلاس سراسری App یا خود اکتیویتی مربوط به فرگمنت) یا SharedPreferences کمک بگیرین.
2- و
قسمت مهم کار اینه که توی خود اکتیویتی هم باید شئ جاری فرگمنت رو توی onSaveInstanceState ذخیره و توی onCreate بازیابی کنین:
public void onCreate(Bundle savedInstanceState) {
...
if (savedInstanceState != null) {
//Restore the fragment's instance
mContent = getSupportFragmentManager().getFragment(savedInstanceState, "mContent");
...
}
...
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
//Save the fragment's instance
getSupportFragmentManager().putFragment(outState, "mContent", mContent);
}
بجای mContent باید اسم کلید دلخواه رو برای نگهداری شئ فرگمنتتون بگذارین (که البته نیازی به تغییرش هم نیست). از این پارامتر برای نگهداری فرگمنتهای مختلف با کلیدهای متفاوت استفاده میشه که میتونین توی کدتون باکمک ساختارهای کنترلی مثل if-else یا switch و... اونها رو مدیریت کنین.