AsyncTask textview重绘

时间:2013-05-13 09:34:20

标签: android android-asynctask textview refresh

我是Android的初学者,我无法用我的代码解释一件事。

我的活动中有一个TextView和一个按钮。在按钮上单击我启动我的AsyncTask子类,将我的活动实例提供给它的构造函数。这个长时间运行的asynctask在进度更新中更新了我的textview,但在此期间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));
    }
}

1 个答案:

答案 0 :(得分:0)

invalidate函数将重绘您的视图。 pld.txt.invalidate();