我有一個按鈕,揭開序幕後臺線程做了一些工作,我試圖用一個ProgressDialog,以防止雙擊該按鈕(或任何其他UI元素),而正在開展工作的用戶。我在按鈕上點擊代碼的第一件事就是顯示進度對話框,它接管了屏幕。我看到的問題是,如果我快速點擊此按鈕,有時會在顯示ProgressDialog之前註冊兩個或更多個印刷機。這導致我假定ProgressDialog.show()在ProgressDialog實際可見之前返回。Dialog.show()是一種非阻塞方法嗎?
任何人能證實這一點?另外,有沒有辦法改變這種行爲,或至少得到對話的實際可見時間的通知?我看到Dialog.onStart(),但給了javadoc,這似乎是在對話框實際上可見之前調用的...
更新: 儘管看起來沒有解決此問題的一般方法,以下爲我的情況:我的工作是由外螺紋和工作量做需要做的比它採取的所有按鈕的時間長的作品點擊要處理:
void myOnClickHandler() {
if(myButton.isEnabled()) {
myButton.setEnabled(False);
// do work here
// setEnabled(true) is invoked at the end of my spawned thread's run().
}
}
你爲什麼不'setClickable在您的按鈕(假)',只是裏面的onClick和你完成進度'setClickable(真)後再次'? –
或'setEnabled(false)' – Jave
我試圖將其作爲最後的手段進行保存。進度對話框作爲阻止機制的使用實際上是內置於正在完成的工作中,如果可能的話,我希望能夠重用該機制。 – Nick