2013-01-03 74 views
0

變化的TextView文本我想點擊一個按鈕後,做這樣的事情:價值變動

case R.id.bcheckConnection: 
     if (IPok()) { 
      PlcState.ErrPlc = false; 
      Constant.adressIpPlc = adresIp.getText().toString(); 

      final ProgressDialog dialog =  ProgressDialog.show(Main.this, "", "Trying to connect..."); 
      new Thread(new Runnable() { 
       public void run() { 
        timeout = network.testConnection(Constant.adressIpPlc, 102, 20000); 
        dialog.dismiss(); 
       } 
      }).start(); 

      if (timeout > -1) { 
       PlcState.ErrPlc = false; 

       stanPolaczenia.setText("Connection established. Timeout = "); 
       stanTimeout.setText(Long.toString(timeout)); 
       currentIp.setText(Constant.adressIpPlc); 

      } else { 
       PlcState.ErrPlc = true; 
       stanPolaczenia.setText("Error"); 
       stanTimeout.setText(""); 
       currentIp.setText(Constant.adressIpPlc); 
      } 
     } else { 
      Toast.makeText(Main.this, "Wrong IP", Toast.LENGTH_LONG).show(); 
     } 
     break; 

所以是有可能AFTER線程停止運行更改文本?

+3

爲什麼不使用「AsyncTask」?它有'onPostExecute()',它在UI線程上運行。 – Eric

+0

謝謝,我將使用'AsyncTask'。它更有意義。 – iluvatar

+0

那麼是否有可能在onCreate方法中更改value引用的值(findViewById)的TxtView? – iluvatar

回答

1

您可以使用Thread.join()阻止當前線程,直到指定的線程完成:

Thread myThread = new Thread(new Runnable() { 
    public void run() { 
     // Do something 
    } 
}); 
myThread.start(); 

// Do some things 

// and block current thread until myThread is finished 
myThread.join(); 

// Continue execution after myThread got finished 

編輯:作爲@Eric已經提到了這個問題的意見:你的(例如)的情況似乎更有意義使用AsyncTask。它有兩個事件(在UI線程中調用),所以您可以使用進度更新和任務完成時更新UI。對於AsyncTask示例,請參閱:AsyncTask Android example

+1

這是否不會破壞在另一個線程上做某事的全部目的? – Eric

+0

在等待'myTHread'之前,你可以做所有類型的事情。完成之後調用'join()'並*真的需要'myThread'完成。在我的例子中,它確實默認線程的目的完全是。我已經更新了我的答案,以便更清楚地說明這一點。 – Veger