簡體   English   中英

如何在片段中保存狀態

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM