2017-02-02 5 views
0

Hallo, ich habe ein Problem mit ProgressDialog, das kein zweites Mal anzeigt, wenn Aktivität launchMode="SingleTask" ist.Fortschrittsdialog wird nicht 2 mal angezeigt, wenn die Aktivität gestartet wird launchMode = "SingleTask"

Ich muss die Aktivität als SingleTask haben. Das erste Mal, dass ich auf die Schaltfläche klicke, wird der Dialog angezeigt, aber wenn ich die Aktivität schließe und sie erneut starte und auf die Schaltfläche klicke, wird die ProgressDialog nicht erneut angezeigt.

Mein Code:

private class FakeTask extends AsyncTask<Integer, Void, Void>{ 
     private FakeCallBackListener mListener; 
     FakeTask(FakeCallBackListener listener){ 
      mListener = listener; 
     } 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      mProgressDialog = new ProgressDialog(mContext); 
      mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
      mProgressDialog.setIndeterminate(true); 
      mProgressDialog.setMessage(mContext.getString(R.string.processing_data)); 
      mProgressDialog.setCancelable(false); 
      mProgressDialog.setInverseBackgroundForced(true); 
      if (!((Activity)mContext).isFinishing()){ 
       mProgressDialog.show(); 
      } 
     } 

     @Override 
     protected Void doInBackground(Integer... params) { 
      try { 
       Thread.sleep(params[0]); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(Void aVoid) { 
      super.onPostExecute(aVoid); 
      mProgressDialog.dismiss(); 
     } 
    } 

und wenn die Schaltfläche i rufen Sie einfach diese geklickt wird:

new FakeTask(listener).execute(delay); 

Im Manifest der spezifischen Activity ich habe:

android:launchMode="singleTask" 

Irgendwelche Vorschläge ? Ich weiß, dass, da die Aktivität nicht wirklich zerstört wird, Kontext an einen toten Dialog weitergegeben wird. Aber wie repariere ich den Dialog, der jedes Mal angezeigt wird?

Antwort

1

Ich denke, Sie haben Probleme mit dem Zugriff auf mContext.

Warum übergeben Sie es nicht als Parameter an FakeTask-Konstruktor?

private FakeCallBackListener mListener; 
private Context mContext; 

FakeTask(Context context, FakeCallBackListener listener) { 
    mContext = context; 
    mListener = listener; 
} 
Verwandte Themen