[英]Updating TextView with setText() doesn't work in AsyncTask onProgressUpdate()
我正在尝试使用有关AsyncTask
正在进行的后台任务的信息来更新我的用户界面。 这是我的onProgressUpdate()
方法。
@Override
protected void onProgressUpdate(final String... params) {
Log.d(TAG, "onProgressUpdate()");
StringBuilder currentParam = new StringBuilder();
StringBuilder statusMessage = new StringBuilder();
txtInputFile.setText("Input: " + params[0]);
txtOutputFile.setText("Output: " + params[1]);
txtPercentDone.setText("" + MainActivity.getProgressStatus(statusMessage, currentParam) + "%");
txtStatusMessage.setText(statusMessage);
txtParamName.setText(currentParam);
}
但是,没有一个TextView更新其文本。 我在doInBackground()
方法中调用publishProgress()
。 日志显示onProgressUpdate()
正在正确调用。 我知道TextView已被实例化并且不为null。 有人知道发生了什么吗?
更新:
这可能与该代码在嵌套片段(正在更新的ui)中有关。 当我显示与根相同的片段时,一切工作正常。 但是我需要在这种情况下嵌套它。 为什么会有所作为?
从AsyncTask
传递参数和上下文,然后使用runOnUiThread
进行设置。 如果不能,请在此处输入日志以了解问题。
每个publishProgress()
都排队在UI线程上,因此,如果doInBackground
在所有onProgressUpdate()
之前结束,则您只会看到上一次ui更新。
尝试测试添加Thread.sleep(MILLISECONDS)
来检查ui线程的并发性。
@Override
protected Void doInBackground(Void... params) {
for (int i = 0; i < SOME_VALUE ;i++) {
publishProgress(""+i);
try {
Thread.sleep(MILLISECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return null;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.