Android Studio Java开发中TextView setText方法不生效问题
问题根因
你的代码存在几个核心问题导致UI不刷新:
- 仅在
onCreate初始化阶段调用了一次setText设置初始值,后台计数线程的循环中仅修改了timerOne、timerTwo两个整型变量,完全没有执行更新TextView文本的逻辑,控件自然不会发生变化。 - 安卓系统强制要求所有UI控件操作必须在主线程(UI线程)执行,子线程直接调用UI方法会抛出
CalledFromWrongThreadException。你的代码中对异常做了空捕获处理,没有任何日志输出,就算触发相关错误你也无法感知。 - 额外隐藏问题:代码中
turn变量初始值为1,全程没有修改逻辑,会永远走timerOne--、timerTwo++的分支,无法实现两个计时器交替增减的效果。
修复方法
在计数逻辑执行完成后,将UI更新操作切到主线程执行,同时补全setText调用,不要空吞异常。参考修改后的计数线程逻辑:
Thread counterThread=new Thread(()->{ try{ while(true){ if(turn % 2 == 0) { timerOne++; timerTwo--; }else{ timerOne--; timerTwo++; } // 切换到主线程更新文本 runOnUiThread(() -> { timerone.setText(String.valueOf(timerOne)); timertwo.setText(String.valueOf(timerTwo)); }); Thread.sleep(1000); // 如果需要交替增减方向,取消下方注释即可 // turn++; } }catch (Exception e){ // 打印异常栈方便排查问题,不要空捕获 e.printStackTrace(); } });
如果不想手动处理线程切换,也可以直接用安卓原生提供的CountDownTimer、Handler.postDelayed等主线程定时方案实现计时逻辑,从根源上避免子线程操作UI的问题。
内容的提问来源于stack exchange,提问作者user17765346
相关产品推荐
相关产品推荐

