일부 작업을 수행하기 위해 백그라운드 스레드를 시작하는 버튼이 있는데 ProgressDialog를 사용하여 사용자가 해당 버튼 (또는 다른 UI 요소)을 두 번 클릭하지 못하게하려고합니다. 내 버튼 onClick 코드에서 제일 먼저하는 일은 화면을 차지하는 진행 대화 상자를 표시하는 것입니다. 지금보고있는 문제는이 버튼을 빠르게 누르면 ProgressDialog가 표시되기 전에 두 개 이상의 프레스가 등록되는 경우가 있다는 것입니다. 이것은 ProgressDialog가 실제로 보이기 전에 ProgressDialog.show()가 돌아오고 있다고 가정합니다.Dialog.show()는 비 블로킹 방법입니까?
누구든지 확인할 수 있습니까? 또한,이 동작을 변경하는 방법이 있습니까? 아니면 적어도 대화 상자가 실제로 표시되는지 알려주는 방법이 있습니까? Dialog.onStart()를 보았지만 javadoc이 주어지면 Dialog가 실제로 표시되기 전에 호출 된 것처럼 보입니다 ...
업데이트 : 일반적으로이 문제를 해결할 좋은 방법이없는 것 같지만 내 작업이 수행하는 외부 스레드 작업의 양에 의해 이루어집니다 내 상황은 모든 버튼 걸리는 시간보다 더 오래 걸립니다에 대한 작품을 다음 것은 처리 할 수 클릭 :
void myOnClickHandler() {
if(myButton.isEnabled()) {
myButton.setEnabled(False);
// do work here
// setEnabled(true) is invoked at the end of my spawned thread's run().
}
}
버튼에'onClickable (false)'를 지정하지 않은 이유는 무엇입니까? onClick 내에서 진행하고 나서 'setClickable (true)'진행을 다시 완료 한 이유는 무엇입니까? –
또는'setEnabled (false)' – Jave
나는 그것을 최후의 수단으로 저장하려고합니다. 진행중인 대화 상자를 차단 메커니즘으로 사용하는 것은 실제로 수행중인 작업에 포함되어 있으며 가능한 경우 해당 메커니즘을 다시 사용할 수 있기를 바랍니다. – Nick