【问题标题】:Android Handler not updating textviewAndroid 处理程序不更新文本视图
【发布时间】:2011-09-04 11:28:51
【问题描述】:

我想我会与大家分享一些奇怪的代码,看看我是否做错了什么。 我已将处理程序传递给后台线程以更新 mainactivity 的 UI(我知道这不是最好的方法,但这应该是一个快速而肮脏的测试应用程序) 基本上,代码会在 textview 上附加一条消息,如下所示:

                    uiHandler.post(new Runnable() {
                    @Override
                    public void run() {
                        Log.i("Text2Server", "Updating log with: " + logput);
                        logTextView.append(logput);
                    }
                });

每次收到 UDP 消息时都会发生这种情况,每次都完美地输出日志,但是 textview 只更新第一条消息,或者有时根本不更新。

我认为这与我的文本视图有关,但我想我会看看是否有人见过类似的东西?

谢谢!

附:我已经尝试了基础知识,例如使用 setText() 而不是 append() 等。

【问题讨论】:

  • 也有这个问题。它在第一次加载时工作,但重新加载它不再工作的活动。

标签: android textview handler


【解决方案1】:

它是否在 LogCat 中输出"Text2Server", "Updating log with: " + logput

.post(Runnable r)这个runnable被放置在队列中,稍后将在附加的线程执行时运行。

也许,处理程序无法访问 ui 线程,这种假设也可能是错误的。

尝试另一种方式。

实例化处理程序:

 Handler handler = new Handler(){

        @Override
        public void handleMessage(Message msg) {        
        String logPutFromThread=msg.getData().getString("somekey");
            Log.i("Text2Server", "Updating log with: " + logPutFromThread);
            logTextView.append(logPutFromThread);
        }

    };

并从线程的Runnable

Runnable updateActivityUi = new Runnable(){

        @Override
        public void run() {

        //do something before you send the message
                Message msg = new Message();
                msg.peekData().putString("somekey", logput)
                handler.sendMessage(msg)


        }};

【讨论】:

  • 是的,显示了日志并且文本视图没有更新。这很奇怪。
  • 不,不过现在试试。将发布结果,抱歉延迟。
  • 好的,还是不行。处理程序不会被调用,也不会记录任何内容。我想我记得以前遇到过这个问题,它与 Loopers 有关,但我不确定。有任何想法吗?感谢您迄今为止的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多