我有以下代码,应该在Asynctask上更新UI textview:
public class HelloWorldActivity extends Activity
{
private static TextView txtview;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
txtview = (TextView) findViewById(R.id.mainview);
}
private static class SimpleTask extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... res) {
try {
Thread.sleep(1500);
} catch(InterruptedException exception) {
Thread.currentThread().interrupt();
}
return null;
}
@Override
protected void onPostExecute(Void params) {
txtview.setText("Hola Mundo");
}
}
}
特别是我试图在经过1.5秒后将Hello World
更改为Hola Mundo
。问题是,在运行应用程序时,文本仍然是Hello World
并且不会更改。我没有任何错误。我甚至在txtview
方法之外设置了onCreate
值,以避免任何访问问题(或者我认为)。
如果我txtview = (TextView) findViewById(R.id.mainview);
之后txtview.setText("Hola Mundo");
,那么它可以完美无缺地工作。
可能是什么问题?
答案 0 :(得分:1)
忘记通过调用AsyncTask
方法执行AsyncTask.execute()
。在初始化onCreate
TextView对象后,通过在txtview
方法中添加以下行来执行此操作:
SimpleTask objSimpleTask=new SimpleTask();
objSimpleTask.execute();
答案 1 :(得分:0)
目前您忘记调用AsyncTask 。
但是我认为使用 AsyncTask&amp;是不良做法 Thread.sleep()更新UI 。
您只需使用处理程序即可。
Runnable updateUI;
Handler h = new Handler();
updateUI=new Runnable() {
@Override
public void run() {
txtview.setText("Hola Mundo");
}
};
h.postDelayed(updateUI,1500);
答案 2 :(得分:0)
你没有调用ASyncTask,在初始化TextView后执行它:
txtview = (TextView) findViewById(R.id.mainview);
SimpleTask objSimpleTask=new SimpleTask();
objSimpleTask.execute();
希望就是你想要的。