2013-08-03 41 views
1

我要通過official Android tutorial for DialogFragments。稍微讓我困惑的部分是:顯示一個DialogFragment令我困惑

void showDialog() { 
    mStackLevel++; 

    // DialogFragment.show() will take care of adding the fragment 
    // in a transaction. We also want to remove any currently showing 
    // dialog, so make our own transaction and take care of that here. 
    FragmentTransaction ft = getFragmentManager().beginTransaction(); 
    Fragment prev = getFragmentManager().findFragmentByTag("dialog"); 
    if (prev != null) { 
     ft.remove(prev); 
    } 
    ft.addToBackStack(null); 

    // Create and show the dialog. 
    DialogFragment newFragment = MyDialogFragment.newInstance(mStackLevel); 
    newFragment.show(ft, "dialog"); 
} 

所以我的困惑源於一個事實,即他們正在使用findFragmentByTag("dialog")。沒有聲明的佈局XML具有名爲dialog的標籤。在正常的Fragmants情況下,佈局中有<fragment ../>標籤,因此我可以使用Id或標記名檢索片段。在這裏,沒有任何。

那麼,什麼給了?這個怎麼用 ?
另外,如果我有多個DialogFragmentsfindFragmentByTag("dialog");會返回什麼?

:)

+0

*此外,如何使用支持DialogFragment進行此項工作?* –

回答

3

片段可以被連接到一個活性的方法有兩種:靜態地在使用<fragment>標籤佈局XML聲明它;或編程使用FragmentManagerFragmentTransaction。在DialogFragments的情況下,您將始終使用後者。

當您將一個片段附加到活動中時,例如使用DialogFragment.show(),您可以給它一個標籤。然後FragmentManager可以稍後通過其標籤找到該片段。在這種情況下,代碼正在檢查FragmentManager是否已經有一個帶有此標記的片段(如果對話框已經顯示,則調用showDialog()時,我相信會發生這種情況)。如果是這樣,它會在顯示它的新實例之前刪除片段(忽略對話框)。

+0

因此,此「標記」更像是一個鍵值對而不是XML標記 –

+1

您可以這麼想。 – Karakuri