2016-07-31 38 views
1

我需要知道爲什麼我們總是使用A.newInstance()或A()來實例化一個片段的新對象,如果我們知道已經有一個實例存在的話。它不會增加Android中應用的內存使用量嗎?爲什麼總是newInstance或片段對象

在我的情況下,我有一個活動和多個片段,它們由抽屜片段中存在的菜單打開。這些碎片還可能會打開未列在抽屜菜單中的其他碎片。所以我想知道是否正常,每次都要通過頂部片段創建次級片段的新實例。頂級碎片也是如此。

  • 片段B(下位片段/新實例中,由A實例化)
  • 回到A(通過按壓向上箭頭)
    1. 片段A(新實例第一次):我的流程進行說明
    2. 片段B(下位片段/再次新實例中,由A實例化)
    3. 回到A(通過按壓向上箭頭)
    4. 片段X(新實例第一次/頂層片段/從抽屜菜單)
    5. 片段A(/頂層片段/從抽屜菜單A的再次新實例)

    是否正確有片段的多個實例A(頂層/點7)和B(較低級/點4 )?當我使用這個策略?

    回答

    0

    你不應該實例化新片段每次你

    需要時用標籤(可選字符串參數)你應該add他們進入FragmentManager「頁面之間切換」,然後使用該標籤找到它們(findFragmentByTag) ,並且replace當前顯示Fragment,如果你能找到其他的。否則,你可以實例化一個新的。

    您還需要放置片段後棧(addToBackStack),我想,所以它們被FragmentManager

    +0

    一些額外的細節可以在這裏舉行到。 http://stackoverflow.com/questions/20825600/findfragmentbytag-returns-null-after-perform-a-fragmenttransaction-using-repla –

    +0

    我使用'add()',因爲我不想調用'onCreateView( )當前片段從Backstack彈出時的前一個片段的方法。但根據你的回答,我假設我需要同時維護'add()'和'replace()'以避免不必要地創建新實例。也沒有維護這種事情的例子。每個示例都演示了新的實例實現。 –

    +0

    在某些時候,你需要初始化一個實例,但是你應該能夠在稍後使用一個唯一標籤檢索該實例,正如我所解釋的 –

    相關問題