Asynctask内部类不更新UI textview

时间:2015-04-16 09:40:16

标签: android android-layout android-fragments android-asynctask

我有以下代码,应该在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");,那么它可以完美无缺地工作。

可能是什么问题?

3 个答案:

答案 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();

希望就是你想要的。