Android:在AsyncTask中设置setText("正在加载...")

时间:2014-10-28 13:20:21

标签: android android-asynctask textview loading

我需要知道如何在AsyncTask中创建一个TextView:

  • 开始:setText("正在加载。");
  • 1秒:setText(" Loading ..");
  • 2秒:setText(" Loading ...");
  • 重启:setText("正在加载。");

在doInBackground的实时动作期间。感谢

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);

    setContentView(R.layout.inicio);

    tareaAsincInicio = new tareaAsincronaInicio();
    tareaAsincInicio.execute();
}

private class tareaAsincronaInicio extends AsyncTask<Void, Integer, Boolean> {

    protected void onPreExecute() {

        ...
    }

    protected Boolean doInBackground(Void... params) {

        ...
        methods();
    }

    protected void onPostExecute(Boolean result) {

        Intent i = new Intent(Inicio.this, MainActivity.class);
        startActivity(i);  

        finish();
    }

    protected void onProgressUpdate(Integer... values) {

        ...
    }
}

4 个答案:

答案 0 :(得分:1)

实际上,如果您需要每1秒更新一次textview,最好使用CountDownTimer:

其他信息:http://developer.android.com/reference/android/os/CountDownTimer.html

以下是示例:http://androidbite.blogspot.com/2012/11/android-count-down-timer-example.html

您在onPreExecute()中启动此CountDownTimer并在onPostExecute()

中停止

答案 1 :(得分:0)

您可以使用启动onPreExecute()

的处理程序来执行此操作
string text = "Loading." 
boolean async = true;   
handler=new Handler();

    final Runnable r = new Runnable()
    {
        public void run() 
        {
            if(text.contains("..."))
                 text = "Loading." else 
                        text = text+".";
            tv.setText(text);
            if(async)
            handler.postDelayed(this, 1000);
        }
    };

    handler.postDelayed(r, 1000);

这样做就是每隔一秒调用一次runnable来改变文本。当您到达onPostExecute()时,将async值更改为false并停止runnable。

答案 2 :(得分:0)

doInBackground来电publishProgress()并传递您想要显示的文字。然后在onProgressUpdate()设置您的文字视图。

new AsyncTask<Void, String, Void>(){

            @Override
            protected Void doInBackground(Void... params) {
                publishProgress("updated text");
                return null;
            }

            @Override
            protected void onProgressUpdate(String... values) {
                textView.setText(values[0]);
            }
        };

答案 3 :(得分:0)

您可以创建一个处理程序作为属性,然后在runnable interface

中执行预先执行和更改对话框标题