【问题标题】:Updating TextView with setText() doesn't work in AsyncTask onProgressUpdate()使用 setText() 更新 TextView 在 AsyncTask onProgressUpdate() 中不起作用
【发布时间】:2014-06-25 17:47:31
【问题描述】:

我正在尝试使用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() 被正确调用。我知道 TextViews 已经实例化并且不为空。有谁知道怎么回事?

更新:
这可能与此代码位于嵌套片段(正在更新的 ui)中的事实有关。当我将相同的片段显示为根时,一切正常。但我需要将它嵌套在这种情况下。为什么会有所作为?

【问题讨论】:

  • 也尝试记录 thead id。
  • @icbytes 它们通过每个单独的日志显示在 LogCat 中,我可以确认此处显示的日志来自 ui 线程。
  • 调试是什么?你在传递参数吗?
  • @icbytes 我正在传递参数,它们是正确的,我已经记录了它们的值。方法MainActivity.getProgressStatus 也是正确的,因为我现在对其进行了硬编码。
  • 啊,我明白了。您的字符串生成器永远不会被填满。如果状态字段是相关的。

标签: android android-asynctask textview


【解决方案1】:

AsyncTask 传递您的参数和上下文,然后使用runOnUiThread 设置它们。如果您不能,请将您的日志放在这里以了解问题。

【讨论】:

  • 你不需要runOnUiThread()onProgressUpdate() 在 UI 上运行
  • 尽管 onProgressUpdate() 在 ui 线程上运行,我也尝试过使用 runOnUiThread(),但它仍然没有帮助(就像你期望它不会改变任何东西一样)。跨度>
  • 你能发布你的日志来检查问题吗?
  • 没有任何与日志相关的事情发生。没有例外或任何事情,并且(通过调试发现)TextView 中的文本值实际上发生了变化,只是没有在屏幕上更新。
【解决方案2】:

每个 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;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多