簡體   English   中英

在替換Fragment中雙重旋轉后恢復片段時清空savedInstanceState Bundle

[英]Empty savedInstanceState Bundle when restoring a Fragment after double Rotation in replacing Fragment

我們稱之為片段A和B.片段B只是A的詳細視圖,它在片段A中單擊按鈕時替換片段A.

替換代碼:

    FragmentTransaction transaction = getFragmentManager().beginTransaction();
    transaction.replace(R.id.fragment_container, new DetailFragment());
    transaction.addToBackStack(null);
    transaction.commit();

當我現在在片段B中旋轉屏幕一次然后按返回時,舊的片段A將恢復而不會出現任何問題(它會使用savedInstanceState Bundle在onActivityCreated中恢復它的狀態)。

現在到了有趣的部分......

當我在Fragment B中不止一次旋轉屏幕並按Back時,我得到一個NullPointerException,因為int[] data = savedInstanceState.getIntArray(STATE_DATA); onActivityCreated返回null。

我該如何解決這個問題? 我唯一的另一種方式是通過永久存儲(Preference或DB),但這似乎非常不適合用例。

編輯/附加信息:包本身不為空,它只是空的

好的,我找到了答案:

當片段B處於活動狀態時,片段A中的以下方法會在旋轉更改時調用:onSaveInstanceState(),onAttach()和onCreate()

因為我正在onActivityCreated中恢復我的狀態(這實際上是由sdk推薦的!)我在第一次旋轉后丟失了存儲在bundle中的變量,因為它們永遠不會被加載到局部變量中,然后存儲在下一個onSaveInstanceState中。 因此,當我嘗試在第二次旋轉后檢索它們時,這些值為null。

解決方案:恢復onCreate()中的變量,以便在再次調用onSaveInstanceState時它們可用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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