0

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

我的活动中有一个 TextView 和一个 Button。在一个按钮上单击我启动我的 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));
    }
}
4

1 回答 1

0

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

于 2013-05-13T11:41:51.947 回答