2013-02-01 112 views
1


今天我的問題是關於線程,在Android的活動,我想顯示一條消息,圖標一個對話框,標題和三個按鈕(正面,負面和中性),我已經做到了,沒有任何錯誤(加上聽衆和一切),我執行正常,並再次沒有錯誤,問題是這樣的:Android的線程問題(線程在後臺運行)

alert.setPositiveButton("Yes", new android.content.DialogInterface.OnClickListener(){ 
     public void onClick(DialogInterface i, int j) 
     { 

      pb.setVisibility(0); //pb is a progress bar 
      new Thread (new Runnable() 
      { 
       public void run() 
       { 
        try { 
         tv.setText("Saved!"); 
         Thread.sleep(5000); 
         tv.setText(null); //tv is a text view 
         Thread.sleep(5000); 
         finish(); 

        } catch (InterruptedException e) { 
         alerttmp.setIcon(R.drawable.ic_launcher); 
         alerttmp.setTitle("Error"); 
         alerttmp.setMessage("Thread could not be executed Thread id: 100390"); 
         alerttmp.show(); 
        } 

       } 
      }).run(); 
     } 
    }); 

見,突出顯示正的按鈕並保持高亮顯示,直到活動關閉,同時我希望對話框消失時,按鈕顯示,電視有文字「保存!!」在其中,然後沒有文字,並最終殺死該活動。

SOS的傢伙!謝謝!

ps:英語不是我的母語,所以沒有莎士比亞的話請! :)請讓語言儘可能簡單!謝謝!

+0

我也跑它的UIThread,沒有工作,直到我選擇它可能仍然沒有工作 –

回答

1

問題是你不在UI線程中做你的UI東西。

您需要將可運行對象發佈到UI處理程序,而不僅僅爲此生成一個新線程。

您可以使用new Handler().postDelayed(Runnable runnable, long millis)來完成。 當然,這必須從UI線程運行 - 而不是從任何其他生成的線程運行。

+0

如何使用一個答案?謝謝 ! –

+0

我把那個處理程序中的我的Runnable與5000作爲一個毫秒,但沒有工作 –

+0

儘管對話框現在沒有了,但電視文本並沒有改變,它只是等待大約10秒鐘,然後退出pb正在運行)現在我需要的只是讓電視的文本更改兩次 –

0

管理使用兩個處理程序,這裏是代碼: 注意:我仍然需要知道更多關於處理程序和postDelayed方法,所以評論將幫助,並將肯定會感激別人我會谷歌它達(要做到這一點無論如何)

alert.setPositiveButton("Yes", new android.content.DialogInterface.OnClickListener(){ 
     public void onClick(DialogInterface i, int j) 
     { 
      pb.setVisibility(0); 
      tv.setText("Saved!"); 
    new Handler().postDelayed(new Runnable() { 
       public void run() { 
        tv.setText(null); 
     }}, 5000); 
    new Handler().postDelayed(new Runnable() { 
     public void run() { 
      finish(); 
}}, 5000); 
     }}); 
+0

根據你的問題,看起來像你想finish()被稱爲5秒在刪除文本之後 - 在這種情況下,您需要從第一個可運行內部發布第二個可運行內容。 (或者:如果您的時間精確,只需將第二延遲更改爲10秒)。 – SirKnigget