2013-07-11 45 views
4

在我的主要活動中,我有一個片段,其中應用了setRetainInstance(true),以便我使用的AsyncTask不受方向更改的干擾。帶屏幕旋轉的片段上的DialogFragment

大量的工作由AsyncTask處理。這就是爲什麼我想在我的活動之上顯示一個帶有progressBar的對話框。

我做了一些研究,我與DialogFragment做成功:

公共類DialogWait擴展DialogFragment {

private ProgressBar progressBar; 

public DialogWait() { 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.dialog_wait, container); 

    Dialog dialog = getDialog(); 
    dialog.setTitle("Hello"); 
    setCancelable(false); 

    progressBar = (ProgressBar) view.findViewById(R.id.progress); 

    return view; 
} 

public void updateProgress(int value) { 
    progressBar.setProgress(value); 
} 

這裏是我的AsyncTask:

public class InitAsyncTask extends AsyncTask<Void, Integer, Void> { 

private Context activity; 
private OnTaskDoneListener mCallback; 
private DialogWait dialog; 

public InitAsyncTask(Context context, OnTaskDoneListener callback, DialogWait dialogWait) { 
    activity = context; 
    mCallback = callback; 
    dialog = dialogWait; 
} 

@Override 
protected Void doInBackground(Void... params) { 
    doStuff(); 

    return null; 
} 

@Override 
protected void onProgressUpdate(Integer... values) { 
    dialog.updateProgress(values[0]); 
} 

@Override 
protected void onPostExecute(Void result) {  
    publishProgress(100); 
      if(dialog != null) 
     dialog.dismiss(); 
    mCallback.onTaskDone(); 
} 

private void doStuff() { 
      //... 
    } 

}

如果我不改變屏幕旋轉,它工作正常。但如果我這樣做,對話框被解僱,幾秒鐘後,我得到了一個空指針,這是無意義的,因爲我設置了條件:if(dialog!= null)

我在做什麼錯?

回答

1

覆蓋onCreate,並onDestroyView方法在DialogWait如下:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setRetainInstance(true);   
} 


@Override 
public void onDestroyView() { 
    if (getDialog() != null && getRetainInstance()) { 
     getDialog().setDismissMessage(null); 
    } 
    super.onDestroyView(); 
} 
+0

我試過,但行爲是完全一樣的... – lost17

+0

@Shajeel你不應該使用setRetainInstance和UI片段,我假設dialogframents自動適合這個描述? – Maxrunner