2013-01-05 23 views
6

任何人都可以看看,如果我正確地做到以下幾點。我有一個具有progressdialog的片段,我需要它在一個方向開關上工作。我現在做這個,像這樣:ProgressDialog(片段),適用於一個方向開關

// I am using the compat libraries 
import android.support.v4.app.DialogFragment; 

public class ProgressDialogFragment extends DialogFragment { 

    private ProgressDialog mProgressDialog = null; 
    private int   mMax   = 100; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setStyle(DialogFragment.STYLE_NO_TITLE, 0); 
     setRetainInstance(true); 
    } 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     mProgressDialog = new ProgressDialog(getActivity()); 
     mProgressDialog.setTitle("Title"); 
     mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
     mProgressDialog.setCancelable(true); 
     mProgressDialog.setProgress(0); 
     mProgressDialog.setMax(mMax); 
     mProgressDialog.setCanceledOnTouchOutside(false); 

     return mProgressDialog; 
    } 

    // there seems to be a bug in the compat library - if I don't do the following - the dialog is not show after an orientation switch 
    @Override 
    public void onDestroyView() { 
     if (getDialog() != null && getRetainInstance()) 
      getDialog().setDismissMessage(null); 
     super.onDestroyView(); 
    } 

    public void setMax(int arg1) { 
     mProgressDialog.setMax(arg1); 
     mMax = arg1; 
    } 

    public void setProgress(int arg1) { 
     mProgressDialog.setProgress(arg1); 
    } 
} 

在我的活動我創建這個ProgressDialogFragment我調用show()時,我需要在對話框中顯示。我想了解爲什麼在onCreateDialog方法中,我不能簡單地返回mProgressDialog,如果它已經存在(我收到一個異常說:「添加內容之前必須調用requestFeature()」)。當然,片段的用途之一是在這些情況下重用資源 - 爲什麼我需要創建一個新的對話框而不是使用已經存在的對話框?

回答

2

您不能簡單地在onCreateDialog方法中傳遞舊對話框,因爲它具有對舊上下文的引用,即正在銷燬的活動。

如果你不重新創建對話框,那麼你最終會發生內存泄漏。

+0

onCreate方法未在方向開關上調用 - 片段未被銷燬並重新創建。 – Lieuwe

+0

對不起,我的意思是再次調用onCreateDialog方法。 –

+0

您是否試圖在方向更改之間保存進度? –

相關問題