2011-09-04 110 views
32

我到處搜索過,找不到解決方案。Android DialogFragment進度條

基本上我有一個登錄屏幕,我試圖讓它在登錄到服務器(通過線程)時顯示進度微調,然後在登錄成功後關閉它。它必須在改變方向的同時工作。

我正在使用DialogFragment與Android兼容性程序包來創建進度條(無法找到任何文檔,only for basic\alert dialog),因爲showDialog()現在已被棄用。現在我只是將自定義消息框顯示爲登錄微調器。

總結:

  • 我怎樣才能建立一個進步微調與DialogFragment
  • 如何在方向更改後在另一個線程中將其解除。

回答

21

我知道這是老問題,但我想分享更好的解決方案,這

根據Android的開發普羅蒂普:

「停止使用ProgressDialog,內嵌指標是你的朋友」

由於羅馬Nurik states

enter image description here

這個很快。停止使用ProgressDialog和其他模式加載 指標。他們是非常干擾性和惱人的,尤其是當 :

  • 你一個每次看到你切換標籤。

  • 你不能退出它們。

  • 他們說「請稍等。」不,謝謝,我寧願只是卸載。內聯與您的內容

要麼顯示負載指示器(例如 http://developer.android.com/training/animation/crossfade.html)或更好,但加載少量的數據在 背景,使你最大限度地減少需要甚至顯示加載 指標。

更多關於進度&活動在design guidelines

+1

謹慎的是,當你複製另一個單詞時,你必須正確地阻止你從它們複製的任何東西,並且你必須提供一個鏈接到原始來源。 –

+0

確實如此,但是如果您說某事已經成功打印,您無法繼續使用該應用,那麼情況如何呢?因爲只有在打印成功時纔可以更新和保存數據,如果不成功,則需要讓用戶再次嘗試/更改數據等。我必須找到一種方法來處理所有這些,而不顯示等待微調。 – AgentKnopf

+0

@Zainodis隱藏/隱藏內聯進度條並使用Crouton顯示錯誤消息,您可以將打印按鈕名稱更改爲重新打印。全部取決於你在哪裏調用ShowProgress(true)ShowProgress(false)來顯示內容。 –

59

對於顯示進度微調,只是重寫DialogFragment.onCreateDialog()在對話框片段就像這樣(無需重寫onCreateView()):

@Override 
public Dialog onCreateDialog(final Bundle savedInstanceState) { 
    final ProgressDialog dialog = new ProgressDialog(getActivity()); 
    // 
    dialog.setTitle(R.string.login_title); 
    dialog.setMessage(getString(R.string.login_message)); 
    dialog.setIndeterminate(true); 
    dialog.setCancelable(false); 
    // etc... 
    return dialog; 
} 

至於解聘從別的地方該對話框片段,你需要(從您的下一個FragmentActivityFragment中獲得),並在其上調用popBackStack()(如果您在此期間沒有執行任何其他片段事務)。

如果您的進度對話框片段和下一個活動之間存在更多的步驟/片段事務,則可能需要使用其他popBackStack(...)方法之一,該方法使用ID或標記將所有內容彈出堆棧中的進度對話框片段。

+1

你有兩次的setTitle,覺得你的意思,dialog.setMessage(R.string.login_message) – worked

+0

@worked謝謝,我固定它 - 沒有'setMessage(INT)''上ProgressDialog',雖然如此,我不得不使用'setMessage(String)'。 –

+17

我想補充一點,'DialogFragment'有一個'dismiss'方法,可以用來支持彈出後退堆棧。只是'findFragmentByTag',轉換成'DialogFragment'和'dismiss()' – Greyson