2013-01-05 1 views
6

다음 작업을 올바르게 수행하면 누구나 볼 수 있습니까? 진행 표시가있는 조각이 있는데 오리엔테이션 스위치에서 작동해야합니다. 저는 현재 지금처럼 이렇게 내 활동에방향 스위치를 통해 작동하는 ProgressDialog (Fragment)

// 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를 작성하고 내가 보여주기 위해 대화 상자를 필요로 할 때 나는() 표시를 호출합니다. onCreateDialog 메서드에서 mProgressDialog가 이미 존재하는 경우이를 반환 할 수없는 이유를 이해하려고합니다. 즉 "content를 추가하기 전에 requestFeature()를 호출해야한다는 예외가 발생했습니다"). 확실히 조각의 사용 중 하나는 이러한 경우에 리소스를 다시 사용하는 것입니다. 이미 존재하는 대화 상자를 사용하는 대신 새 대화 상자를 만들어야하는 이유는 무엇입니까?

답변

2

onCreateDialog 메서드에 이전 대화 상자를 전달할 수 없습니다. 이전 컨텍스트 즉, 삭제 된 작업에 대한 참조를 가지기 때문입니다.

대화 상자를 다시 만들지 않으면 u가 메모리 누수로 끝납니다.

+0

방향 스위치에서 onCreate 메서드가 호출되지 않습니다. 단편은 파괴되지 않고 다시 만들어집니다. – Lieuwe

+0

죄송합니다 다시 전화 할 onCreateDialog 메서드를 의미합니다. –

+0

방향 변경 사이의 진행 상황을 저장하려고합니까? –