2012-02-11 27 views
-1

所以,我有一個代碼:爲什麼我有錯誤?安卓ProgressDialog +主題

((Button) findViewById(R.id.run)).setOnClickListener(new View.OnClickListener() { 
        public void onClick(View v) { 
         progDialog = ProgressDialog.show(WaggActivity.this, 
           "", "Loading...", true, true); 

         new Thread(new Runnable() { 
          public void run() { 
           try { 
            urlTxt.setText(findUrl(String.valueOf(search.getText()))); 
           } catch (Exception e) { 
            Log.e("MainActivity", e.getMessage()); 
           } 
           progDialog.dismiss(); 
          } 
         }).start(); 

我找不到一個錯誤。 :( 錯誤是:只有原來的線程創建視圖層次可以觸摸它vews

回答

1

在Android中你有一個UI線程,其中,通過您的活動創建的。這是唯一的線程在其中可以修改的視圖,在你的情況下是ProgressDialog。

所以你不能從其他線程修改它,你必須從你的Ui線程中調用它。

你應該叫:Activity.runOnUiThread(Runnable) ;作爲解釋here.

0

是不是錯誤消息安靜明確只有主線程可以訪問View小號 您正在訪問urlTxt。?。另外,自定義線程。

爲了解決此問題,使用下面的代碼片段

urlTxt.post(new Runnable() { 
     public void run() { 
      urlTxt.setText(findUrl(String.valueOf(search.getText()))); 
     } 
    }); 
+0

哦太好了!非常感謝你!!!所以這意味着,只有主線程才能與視圖一起工作? – ruslanys 2012-02-11 17:06:42

+0

@ user1203901是的,正好。 – poitroae 2012-02-11 17:25:03