【问题标题】:Android runOnUiThread not updating UI elementsAndroid runOnUiThread 不更新 UI 元素
【发布时间】:2015-06-10 13:43:43
【问题描述】:

您好,我正在开发使用网格视图的 android 应用程序。我想动态更新网格项。我的网格项包含一个标题文本。我试着这样做,但它不适合我。

 ((Activity)context).runOnUiThread(new Runnable()
    {
        public void run()
        {
            Debug.print("this is update progress inside thread  ...");

            owner.setText("Uploading...");

            invalidate();
            requestLayout();
        }
    });

所以在上面的代码中它的打印调试语句。但不更新网格项内的所有者文本。

我也试过了……

 Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            owner.setText("Uploading...");
        }
    };
    handler.sendEmptyMessage(0);

【问题讨论】:

  • 您能再添加一些代码吗?不清楚什么是“所有者”,你在哪里初始化它以及这一切在哪里运行。

标签: android gridview android-runonuithread


【解决方案1】:

所以在上面的代码中它的打印调试语句。但不更新我的 网格项内的所有者文本。

我认为它的 textview 没有引用您在网格适配器中的项目。你可以在runonUIThread方法中init和getTag()的时候通过set tag来检查。

让我们检查一下这个 textview 是局部变量还是全局变量。如果是全局的,它只引用最后一项 - 然后检查最后一项更改? 如果不是,好的。让我们发布完整的代码。

【讨论】:

  • 我在自定义视图类中,我只有上下文引用。无法获得活动。我尝试删除 invalidate 和 requestLayout 但这对我不起作用。
  • 它正在更新多个网格项目,除了最后一个添加的项目。
【解决方案2】:
runOnUiThread(new Runnable() {
    @Override
    public void run() {
        Debug.print("Updating UI ...");
        owner.setText("Uploading ...");
        invalidate();
        requestLayout();
    }
});

【讨论】:

  • 我在自定义视图类中,我只有上下文引用。无法获得活动。
  • 那你应该使用Handler
【解决方案3】:

尝试刷新您用于加载网格项目的适配器。 您可以使用 invalidateViews() 方法或 adapter.notifyDataSetChanged()

这将帮助您解决问题。

编码愉快..

【讨论】:

  • Srinivasan 我实际上在做什么我正在动态地将项目添加到网格中。哪个工作正常。之后,我将数据上传到服务器。我想向我的网格项目显示该状态。如果我在网格中添加多个项目,它的工作正常,除了最后一个。如果我上传单个记录,它就不起作用。这意味着对于一个项目它不起作用。最先添加的记录。
  • 好的...我理解 nilkash。请告诉我您如何从网格中找到“所有者”文本视图。可能是查找视图以显示“上传”文本的问题。还有一件事,如果网格有单个项目,请告诉我数据是否上传到服务器?
【解决方案4】:

检查您的代码中是否有任何可能阻塞 UI 的 Thread.sleep()。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    • 2011-12-25
    • 1970-01-01
    相关资源
    最近更新 更多