2012-07-22 127 views
1

如何將上下文和名稱字符串作爲參數傳遞給新線程?Android:將參數傳遞給線程

錯誤在編譯:

label = new TextView(this); 

構造的TextView(新的Runnable(){})是未定義

線 「label.setText(name);」:

不能指以不同方法定義的內部類中的非最終變量名稱

代碼:

public void addObjectLabel (String name) { 
    mLayout.post(new Runnable() { 
     public void run() { 
      TextView label; 
      label = new TextView(this); 
      label.setText(name); 
      label.setWidth(label.getWidth()+100); 
      label.setTextSize(20); 
      label.setGravity(Gravity.BOTTOM); 
      label.setBackgroundColor(Color.BLACK); 
      panel.addView(label); 
     } 
    }); 
} 
+2

編寫完整的課程代碼。 – 2012-07-22 04:12:49

回答

3

需要聲明namefinal,否則你無法在內部anonymous class使用它。

此外,您需要聲明您要使用哪個this;因此,您正在使用Runnable對象的this參考。你需要的是這樣的:

public class YourClassName extends Activity { // The name of your class would obviously be here; and I assume it's an Activity 
    public void addObjectLabel(final String name) { // This is where we declare "name" to be final 
     mLayout.post(new Runnable() { 
      public void run() { 
       TextView label; 
       label = new TextView(YourClassName.this); // This is the name of your class above 
       label.setText(name); 
       label.setWidth(label.getWidth()+100); 
       label.setTextSize(20); 
       label.setGravity(Gravity.BOTTOM); 
       label.setBackgroundColor(Color.BLACK); 
       panel.addView(label); 
      } 
     }); 
    } 
} 

但是,我不知道這是更新UI(你或許應該使用runOnUiThreadAsyncTask)的最佳方式。但上面應該修復你遇到的錯誤。

+0

謝謝!!!!很好用! – brgsousa 2012-07-22 04:56:34

+0

不要忘了標記答案是正確的,如果它可以幫助你;它可以幫助其他人稍後解決同樣的問題,並將幫助您在未來獲得更多答案! :) – Eric 2012-07-22 05:06:58