2014-11-06 81 views
1

我想在一個Activity中多次彈出一個timepicker和一個datepicker。Android DialogFragment:我可以重新使用,還是必須重新使用另一個?

我不清楚自己是否應該製作每個實例,並根據需要顯示它們,或者每次需要彈出對話框時都應該創建新實例。

而我很困惑findFragmentByTag/findFragmentById。看來只有當前顯示片段才能找到片段?

但是,如果沒有找到它,並且我創建一個新的Fragment並使用相同的標記顯示它,我會得到一個IllegalStateException。我如何在onCreate中恢復一個片段?

目前,我這樣做:

FragmentManager fm = getSupportFragmentManager(); 

if (savedInstanceState == null) { 
    timePicker = new RadialTimePickerDialog(); 
    datePicker = new CalendarDatePickerDialog(); 
    fm.beginTransaction().add(timePicker, FRAGMENT_TIME_PICKER) 
     .add(datePicker, FRAGMENT_DATE_PICKER).commit(); 
} else { 
    timePicker = (RadialTimePickerDialog) 
     fm.findFragmentByTag(MedicationCollapsePanel.FRAGMENT_TIME_PICKER); 
    datePicker = (CalendarDatePickerDialog) 
     fm.findFragmentByTag(MedicationCollapsePanel.FRAGMENT_DATE_PICKER); 
} 

正如我所說,這未能真正找到碎片,幾乎一樣糟糕,它會立即把它們顯示在活動開始時,我不想。

謝謝。

回答

1

我認爲這些類是從gitHub中彈出的,在Google搜索頂部彈出的類。

它們擴展dialogFragments。

DialogFragments負責在片段管理器解散時自行刪除片段。你可以看到源代碼,以及得到這個能解密,從下面的鏈接:

辭退():

辭退的片段和其對話。如果片段被添加到反向堆棧中,則將彈出所有反向堆棧狀態直到幷包括該條目,將彈出 。否則,新的交易將致力於刪除 該片段。

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.1_r1/android/app/DialogFragment.java#DialogFragment.onDismiss%28android.content.DialogInterface%29

因此,他們不是被解僱,因爲他們將通過調用底層的背景和取得的片段經理本身自動自己卸裝後可重複使用。而是創建一個新實例並顯示它們,或者您可以嘗試覆蓋其默認行爲。你可以嘗試改變他們被解僱後的行爲,或者阻止他們被解僱(比如隱藏他們)。

相關問題