2011-08-29 18 views
2

嗨我有一個關於AlertDialog/Toast的問題。 當用戶點擊一個按鈕時,只需顯示一條顯示「你是對的」的信息1秒鐘。當我使用toast/alertdialog實現它時,它會執行此操作,但在dailog關閉之前,會在onclick方法中啓動下一條指令。我該如何解決?如何暫停其他指令,直到關閉對話框消息

+0

這是一個很棒的問題,我已經注意到了這一點。您可能會認爲Android會「等待」響應,但是您的程序會繼續執行,即使它正在等待響應。 – Jack

+0

在對話框關閉的同時睡眠線程。 –

+1

睡覺的用戶界面線程會導致它不響應當用戶點擊 – Jack

回答

1

如果您使用的是吐司,則使用Handler推遲一個任務以顯示吐司的時間。

使用對話框時,請爲「Okey」按鈕實施onClickListener

+0

對話框沒有任何問題,因爲它會暫停,直到用戶單擊..但是爲了顯示一條消息,只有一條消息,它不會等待任何東西,因此繼續執行下一個不希望的指令..使用線程的暫停會導致它在對話後沒有響應..使用處理程序的方式不同,你可以使用代碼片段來解釋嗎? – Nikhil

0

我不得不做的是在相應的偵聽器中放置AlertDialog後面的任何代碼。例如,如果在警報對話框後有一堆代碼,並且只希望根據某種響應執行,請將該代碼移到另一個方法中。然後,在您的positiveButton偵聽器(或負面按鈕偵聽器)中,將該調用添加到您剛剛創建的相應方法。或者你可以將所有內容都塞進監聽器中,但這會使代碼變得不易管理。

+0

沒有沒有響應。對話框應該出現,並在其他語句執行之前,這是不聽任何respnse – Nikhil

2

這裏是我是如何做到的使用Handler對象---

公共類ToastActivity延伸活動{

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    Handler mHandler = new Handler(); 
    for(int i=10;i>=1;i--) 
    { 
     Toast.makeText(this, ""+i, Toast.LENGTH_SHORT).show(); 
    } 
    mHandler.postDelayed(new Runnable(){public void run(){ 
    LinearLayout t=(LinearLayout)findViewById(R.id.l); //This task is delayed by 21 sec. 
      t.setBackgroundColor(Color.CYAN); 
     } 
    }, 21000);   
} 

}土司消失後祝酒後

語句執行。

+0

因爲長度短的吐司顯示2秒,有必要的最小等待時間大約是20000ms,所以等待21000ms是一些硬編碼,但它是正確的。 –