需要明确的是,这个问题不是关于如何从线程更新 TextView,它工作正常。问题是,即使我在整个线程中多次调用更新 TextView,更新也只会在线程完成后才会出现。这是一个例子:
公共类 NDThread 扩展线程 { 受保护的 LogActionListener log_listener; 私人处理程序处理程序=新处理程序(); 公共无效运行(){ logAction("开始"); // 做很多事情.. logAction("中途"); // 还有很多东西.. 日志操作(“完成”); } 公共接口 LogActionListener { 公共无效onLogAction(字符串参数字符串); } 公共无效 logAction(最终字符串 str){ if(log_listener != null) handler.post(new Runnable() { @覆盖 公共无效运行(){ log_listener.onLogAction(str); } }); } }
在我的主要活动中,我实现LogActionListener
接收字符串并更新 TextView:
NDThread 线程 = 新的 NDThread(); thread.setOnLogActionListener(this); 线程.run(); // 其他地方.. @覆盖 公共无效onLogAction(最终字符串味精){ handler.post(new Runnable() { @覆盖 公共无效运行(){ textView.append(msg); } }); }
如您所见,我Handler
在 Thread 和 Activity 中都使用了 s,因为我不确定哪个正确使用。但是,结果始终是整个 Thread 的空白 TextView,然后在最后它将打印 3 行。我究竟做错了什么?