【问题标题】:Android: setText("Loading...") inside AsyncTaskAndroid:AsyncTask 中的 setText("Loading...")
【发布时间】:2014-10-28 13:20:21
【问题描述】:

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

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

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) {

        ...
    }
}

【问题讨论】:

    标签: android android-asynctask textview loading


    【解决方案1】:

    实际上,如果您需要每 1 秒更新一次文本视图,最好使用 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() 中停止它

    【讨论】:

      【解决方案2】:

      您可以使用您启动的处理程序 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);
      

      它的作用是每秒调用一个可运行的对象来更改文本。当您到达onPostExecute() 时,您将async 的值更改为false 并停止runnable。

      【讨论】:

        【解决方案3】:

        让您的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]);
                    }
                };

        【讨论】:

          【解决方案4】:

          您可以创建一个处理程序作为属性,然后在预执行时启动并在可运行界面中更改对话框标题

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2014-10-07
            • 2015-09-25
            • 1970-01-01
            • 2015-08-05
            • 1970-01-01
            • 2011-09-04
            • 1970-01-01
            相关资源
            最近更新 更多