繁体   English   中英

使用setText()更新TextView在AsyncTask onProgressUpdate()中不起作用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM