[英]How to save state in fragment
我有 4 個按鈕來替換活動中的片段 [片段 A ,片段 B ,片段 C ,片段 D] 然后我將片段 A 替換為活動,然后將片段 A 中的值更改為片段 A 並替換片段 C到片段 B 。 但我想將片段 A 替換為片段 C 。 如何在片段 A 中保存狀態。
提交片段時的代碼
private void beginFragmentTransaction(BaseFragment fragment) {
String tag = fragment.getClass().getName();
currentFragmentTag = tag;
boolean fragmentPopped = getChildFragmentManager().popBackStackImmediate(tag, 0);
if (!fragmentPopped) {
getChildFragmentManager().beginTransaction()
.replace(R.id.container, fragment, tag)
.addToBackStack(tag)
.commit();
}
}
替換圖
片段 A -------> 片段 B
片段 B -------> 片段 C
片段 C -------> 片段 A
附注。 我不想使用后退按鈕返回片段 A ,我想替換片段 A 並在第一次提交中恢復數據。
您可以選擇實現onRestoreInstanceState()
,系統在onStart()
方法之后調用onRestoreInstanceState()
而不是在onCreate()
期間恢復狀態。 僅當存在要還原的已保存狀態時,系統才會調用onRestoreInstanceState()
,因此您無需檢查Bundle
是否為null。
僅供參考:這是一個示例代碼。 僅供參考。
public class MainFragment extends Fragment {
private String title;
private double rating;
private int year;
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putString(TITLE, "Gladiator");
savedInstanceState.putDouble(RATING, 8.5);
savedInstanceState.putInt(YEAR, 2000);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
title = savedInstanceState.getString(TITLE);
rating = savedInstanceState.getDouble(RATING);
year = savedInstanceState.getInt(YEAR);
}
}
僅供參考 :這真的是一個很好的線程檢查一下這一切,如何在后台堆棧中正確保存Fragments的實例狀態?
如果您想保存以前選項卡的狀態並且不想刷新/重新創建視圖,請使用此代碼並根據選項卡限制更改值
ViewPager mViewPager = (ViewPager)findViewById(R.id.pager);
mViewPager.setOffscreenPageLimit(2);
您可以顯示和隱藏用於保存狀態的片段,或使用導航組件最新版本
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.