2011-03-20 160 views
1

我在嘗試將ProgressDialog放入我的應用程序時遇到問題。在我的GameEngine類(它沒有擴展任何東西)中,我有下面的代碼。第一行產生一個運行時異常,雖然我發現這個線程看起來差不多是這樣的:Android TimerTask throws RuntimeException if Show ProgressDialog is added in run(),但我並不十分了解如何實現這個解決方案。任何幫助將不勝感激,謝謝。Android ProgressDialog運行時異常錯誤

//Create ProgressDialog 
    ProgressDialog dialog = ProgressDialog.show(context, "", 
      "Loading...", true); 

    //Set Clusters before level starts 
    for (int i = 0; i < 80; i++) 
    { 
     updateBacteria(); 
     updateAttraction(); 
     checkCollisions(); 
     moveObjectsAwayFromWalls(); 
    } 

    dialog.dismiss(); 

回答

1

如果此方法未在主活動線程中運行,則應更改它。怎麼樣?在主要活動中設置一個處理程序並將其傳遞給線程(上圖)。在handler中,您應該實現方法的GUI相關部分(即ProgressDialog)。當你需要顯示ProgressDialog時,只需調用你的Handler,並繼續處理(在這種情況下你的循環)。 dismiss()也是如此。

+0

比我所希望的更多的工作,但它的工作原理,謝謝..雖然很快的問題:如果我想用Toast而不是ProgressDialog來顯示我的「加載..」文本,我將不得不使用處理程序嗎? – Cbas 2011-03-20 02:47:45

2

您只能在UI線程中顯示對話框(這是擴展Activity的主要類)。爲了做到這一點,你可以編寫一個Handler並使用它將消息從非UI線程發送到UI線程。 Android有這樣一個例子in their ProgressDialog example.查看他們在「第二個線程示例ProgressDialog」下的代碼片段。

您也可以按照您提供的鏈接所回答的相同方法進行操作,雖然Handler是一種更爲穩健的方法。

+0

比我希望的更多的工作,但它的工作原理,謝謝..雖然很快的問題:如果我想使用Toast而不是ProgressDialog來顯示我的「加載..」文本,我將不得不使用處理程序嗎? – Cbas 2011-03-20 02:56:09