2017-02-02 10 views
0

Здравствуйте, у меня возникла проблема с ProgressDialog, которая не отображается во второй раз, когда Activity имеет launchMode="SingleTask".Прогресс Диалог не отображается 2 раза, когда действие запускаетMode = "SingleTask"

У меня должна быть активность как SingleTask. в первый раз, когда я нажимаю кнопку, на которой отображается диалог, но когда я закрываю действие и запускаю его снова, и я нажимаю кнопку, то ProgressDialog не отображается снова.

Мой код:

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(); 
     } 
    } 

и когда кнопка нажата я просто называю это:

new FakeTask(listener).execute(delay); 

В Manifest в конкретном Activity я есть:

android:launchMode="singleTask" 

Все предложения ? Я знаю, что, поскольку действие фактически не уничтожено, передается контекст в мертвый диалог. Но как я могу исправить диалог для отображения каждый раз?

ответ

1

У меня проблема с доступом к mContext.

Почему бы не передать его как параметр конструктору FakeTask?

private FakeCallBackListener mListener; 
private Context mContext; 

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