我有點初學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));
}
}
您是否嘗試過從onProgressUpdate調用ui線程中的方法並從該方法設置文本? – 2013-05-13 10:08:17
好問題!有趣的是,但同樣的情況發生在我更新我的onClick本身的文本視圖...嗯。 – 2013-05-13 11:25:32