2013-05-13 63 views
0

我有點初學Android,我無法用我的代碼解釋一件事。AsyncTask textview redrawing

我對我的活動有一個TextView和一個按鈕。在一個按鈕上單擊我啓動我的AsyncTask子類,並將其活動實例授予其構造函數。這個長時間運行的asynctask在進度更新中更新了我的文本視圖,但是在此期間textView不會被清除並完全重新繪製,而是將數字寫在彼此之上。

爲什麼現在我解決這個異步並不重要,因爲它是測試的一部分,現在唯一有趣的問題是爲什麼會發生這種情況。我忘了TextView的重要屬性設置還是什麼?

<TextView 
      android:id="@+id/textView1" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="60dip" 
      android:layout_marginBottom="20dip" 
      android:text="Large Text" 
      android:gravity="center_horizontal" 
      android:textSize="50sp"/> 

而且我的代碼:

public class AsyncTask1 extends Activity 
{ 
public TextView txt; 

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_async_task1); 
    this.txt = (TextView) findViewById(R.id.textView1); 

} 

public void onClick(View v) 
{ 
    myAsync m = new myAsync(this); 
    m.execute(""); 
} 

} 

這裏是我的AsyncTask推導:

class myAsync extends AsyncTask<String,Void,String> 
{ 

    AsyncTask1 pld = null; 
    public myAsync(AsyncTask1 pld) 
    { 
     this.pld = pld; 
    } 

    int i = 0; 
    @Override 
    public String doInBackground(String... N) 
    { 
     for(i=0;i<20;i++) 
     { 
      try { Thread.sleep(1000); } 
      catch (Exception e) {} 
      publishProgress(); 
     } 
     return null; 
    } 

    @Override 
    public void onProgressUpdate(Void... values) 
    { 
      pld.txt.setText(String.valueOf(i)); 
    } 
} 
+0

您是否嘗試過從onProgressUpdate調用ui線程中的方法並從該方法設置文本? – 2013-05-13 10:08:17

+0

好問題!有趣的是,但同樣的情況發生在我更新我的onClick本身的文本視圖...嗯。 – 2013-05-13 11:25:32

回答

0

無效功能將重新繪製你的看法。 pld.txt.invalidate();

+0

不工作:( INT CC = 1; 公共無效的onClick(視圖v) { CC++; txt.setText(將String.valueOf(CC)); txt.invalidate();} 有趣 – 2013-05-13 11:46:20

+0

,當我從清單中刪除android:theme =「@ style/FullscreenTheme」時,它開始以良好的方式工作...... hm。 – 2013-05-14 11:18:45

+0

仍然不知道問題的真正原因。 eclipse中的新項目模板, 2013-05-14 12:06:10

相關問題