2013-10-09 2 views
0

현재 ProgressDialog이있는 AsyncTask이 있습니다. OnDismissListenersetOnDismissListener으로 설정 한 다음 AsyncTask을 취소합니다. 문제는 다시 버튼을 누르 든 화면의 아무 곳에서나 ProgressDialog (이후는 AsyncTask)이 닫히는 것입니다.Android ProgressDialog가 닫습니다. 소스 검색

나는 내가 ProgressDialog이 기각 된 방법을 알고, 그리고 다시 버튼을 누를 경우 다음 나는 AsyncTask을 취소 것이며, ProgressDialog 외부 영역을 누를 경우, 난 그냥 ProgressDialog을 최소화하는 지점에 도달하고 싶습니다 AsyncTask은 계속됩니다.

OnDismissListener의 집합을 어떻게 검색합니까? 제가하려는 일을 성취 할 다른 방법이 있습니까?

감사 (울부 짖는 소리 코멘트 기준)

편집 :

이 내 코드입니다. 두 리스너 내부에 중단 점을 배치하고 이제는 대화 상자를 취소하는 방법 (뒤로 단추 또는 대화 상자 외부에서), 두 리스너 모두 호출됩니다.

@Override 
    protected void onPreExecute() { 
     mProgressDialog = new ProgressDialog(mContext); 
     mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
     mProgressDialog.setCancelable(true); 
     mProgressDialog.show(); 

     mProgressDialog.setOnDismissListener(new OnDismissListener() { 

      @Override 
      public void onDismiss(DialogInterface dialog) { 
       (SyncOperation.this).cancel(true); 
      } 

     }); 

     mProgressDialog.setOnCancelListener(new ProgressDialog.OnCancelListener() { 

      @Override 
      public void onCancel(DialogInterface dialog) { 
       (SyncOperation.this).cancel(true); 
      } 

     }); 
    } 
+2

는 2 청취자, onDismiss 있습니다 및 onCancel – njzk2

+0

설명이 관련 코드를 게시하는 것으로 충분하지 않습니다. – GrIsHu

+0

언급 한 작업 중 하나가 수행되면 두 리스너가 모두 호출됩니다. – Meir

답변

0

나는 개인 변수 추가 :

private boolean mBackPressed; 

을 그리고 다음과 같이 나는 청취자에게 구현 :

mProgressDialog.setOnDismissListener(new OnDismissListener() { 

     @Override 
     public void onDismiss(DialogInterface dialog) { 
      (SyncOperation.this).cancel(true); 
      if(mBackPressed) { 
       Toast.makeText(mContext, "Cancel", Toast.LENGTH_SHORT).show(); 
       mBackPressed = false; 
      } else { 
       Toast.makeText(mContext, "Minimize", Toast.LENGTH_SHORT).show(); 
      } 
     } 

    }); 

    mProgressDialog.setOnKeyListener(new ProgressDialog.OnKeyListener() { 

     @Override 
     public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { 
      if(keyCode == KeyEvent.KEYCODE_BACK) { 
       mBackPressed = true; 
      } 
      return false; 
     } 

    }); 
0

사용 SimpleGestureDetector

detector = new SimpleGestureFilter(this,this); 
+0

이것을 해결할 방법이 아닌가요? 대화 상자가 뒤로 가거나 화면에서 눌려지면 대화 상자가 취소됩니다. 매번 일어나는 일을 변경하고 싶습니다 ... – Meir