我是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));
}
}
答案 0 :(得分:0)
invalidate函数将重绘您的视图。 pld.txt.invalidate();