2014-02-05 1 views
1

사용자가 뒤로 키를 눌렀을 때 취소하려고하므로 onCancel 메서드가 구현 된 진행 대화 상자가 있지만 사용자가 화면을 누를 때 문제가 발생합니다. 대화 상자가 취소되고 onCancel 메서드가 호출됩니다.사용자가 화면을 누를 때 onCancel 대화 상자가 호출 중임

어떻게 피할 수 있습니까?

public void showProgressDialog(Context ctx, String text_connecting) { 
    if (this.progress == null) { 
     this.progress = ProgressDialog.show(ctx, "", text_connecting, true, 
       true); 
     this.progress.setOnCancelListener(new OnCancelListener() { 
      public void onCancel(DialogInterface dialog) { 
       hideProgressDialog(); 
      } 
     }); 
    } 
    this.progress.show(); 
} 
+0

에서 참조 모습이 코드는 스레드에서 표시 트랙의 경우 모션 이벤트를 확인합니다. set cancel-able을 false로 표시하면서 모션 이벤트가 다운되면. 상수 폴링을 없애고 CPU를 계속 사용하려면 로컬 브로드 캐스트를 사용할 수도 있습니다. – Skynet

+0

또 다른 해결책은 onBackPress를 재정의하는 것입니다. 대화 상자를 취소 할 수 없게 설정하고 뒤로 누 르면 취소합니다. 그렇게하면 터치 이벤트에서 대화가 취소되지 않습니다. 어떻게 그것이 맞고 그렇게 맞습니까! – Skynet

답변

0

당신은 진행 대화 상자는 현재 표시되고있는 경우 (스레드에서) 확인해야합니다 표시 트랙의 경우 모션 이벤트 스레드에서 :

는 코드입니다. set cancel-able을 false로 표시하면서 모션 이벤트가 다운되면. 상수 폴링을 없애고 CPU를 계속 사용하려면 로컬 브로드 캐스트를 사용할 수도 있습니다. 같은

뭔가 : 조금 해킹

@Override 
     public void run() { 


      if(progress.isShowing() &&(checkTheVariableYouSetInMotionEventDownHere){ 
        progress.setCancellable(false); 
         } 
     } 
    }; 

그것을, 당신은 바보 같은 증거하기 위해 위의 논리를 더 향상시킬 수 있습니다.

두 번째 방법은 자체 모션 이벤트를 체크하고 거기에서 취소 가능한 false를 설정하는 것입니다.

+0

wtf, 고마워요.하지만 간단하게 취소 할 수있는 대화 상자를 보여주고 싶습니다. – NullPointerException

+0

또 다른 해결책은 onBackPress를 재정의하는 것입니다. 대화 상자를 취소 할 수 없게 설정하고 뒤로 누 르면 취소합니다. 그렇게하면 터치 이벤트에서 대화가 취소되지 않습니다. 어떻게 그것이 맞고 그렇게 맞습니까! – Skynet

+0

대화 상자를 Dialog.cancelable (false)로 설정하면 대화 상자에서 dialog.dismiss()를 호출 할 때까지 대화 상자가 취소되지 않습니다. 질문을 잘못 해석 한 것일 수 있습니다. – Skynet

0

아니라, 내가 마지막으로이 모든 임의 터치에 폐쇄되는 것을 ProgressDialog을 방지 할 수 있습니다 당신은

this.progress.setCanceledOnTouchOutside(false); 

을 할 수있는 것이이 내 질문

public boolean onKey(DialogInterface arg0, int arg1, KeyEvent arg2) { 
        if (arg1 == KeyEvent.KEYCODE_BACK) { 
         hideProgressDialog(); 
        } 
        return true; 
       } 
0

에 이전 코드의 insted하고 해결 화면. 뒤로 버튼은 여전히 ​​그것을 취소합니다. 진행 대화 상자가 현재 (스레드에서) 표시되어있는 경우가있을 것이다

0

사용이 link

this.progress.setCanceledOnTouchOutside(false); 
관련 문제