1

首先我很抱歉,如果這個解釋似乎不清楚,我是Android的新手。 我在主要活動中有一個ViewPager,顯示用戶動態添加的片段。碎片最初是在活動啓動時創建的,並通過適配器添加到ViewPager,即適配器只是簡單地返回適當的碎片,正如我理解的那樣,當ViewPager首次檢索到碎片時,片段的內容就會創建。什麼是恢復片段的正確方法?

問題是當方向改變後主恢復所有片段並且當Adapter試圖返回由用戶新創建的Fragment方法時,不再調用createView(),並且它失敗並且出現NullPointerException。看起來ViewPager保留了最初附加的片段,並且不會爲相同位置的新添加的片段調用createView()。

我有一種感覺,我錯過了片段生命週期中的關鍵點。我不想改變設計。我的主要問題是什麼正確的方法是返回活動恢復後添加到ViewPage的片段?有沒有辦法找到最近附加的碎片?

回答

3

如果片段已經存在,它將被重新使用。然而片段的狀態不會。你應該看看http://developer.android.com/training/basics/activity-lifecycle/recreating.html瞭解更多信息。

尤其是你應該看看覆蓋onSavedInstanceStateonRestoreInstanceState爲重新填充所生成的NullPointerException領域的方法

要確定某個片段的實例已經創建,您可以使用「findFragmentByTag」像這樣:

String fragmentTag = MyFramgment.getClass().getName(); 
MyFragment frag = getFragmentManager().findFragmentByTag(fragmentTag); 

if(frag == null) 
    frag = new MyFragment(); 

無論結束在'frag'中引用,顯示給用戶。

+0

我主要關心的是我需要找到一個將在ViewPager中重用的片段,因爲它在初始連接之後在那裏。我的設計並沒有假設片段被保留在ViewPager中,並且它創建了一個新片段。所以,而不是創建一個新的我必須找到附加一個並從適配器返回它。 –

+0

請參閱我的答案更新,其中顯示了檢索已存在片段的一種方法。希望這有助於我看到 – CurlyPaul

+0

,所以FragmentManager會在活動復活時關注碎片。我嘗試過,但在其他情況下。我現在就試試這個。謝謝! –

相關問題