Android实现TextView每1秒追加圆点,满3个后重置循环的需求求助
解决方案
你原来的嵌套循环逻辑不对——Timer的scheduleAtFixedRate是每秒执行一次run方法,内部不需要循环,只需要维护一个计数器跟踪当前圆点数量就行。另外要注意:Android里不能在后台线程直接更新UI,必须切回UI线程操作。
直接给你修正后的代码:
MaterialTextView txt = alertdialog.findViewById(R.id.dialogtext); // 初始化圆点数量,从1个开始 int[] dotCount = {1}; // 用数组是为了在匿名内部类里能修改值 new Timer().scheduleAtFixedRate(new TimerTask(){ @Override public void run(){ // 构建当前要显示的文本:原文本 + 对应数量的圆点 StringBuilder sb = new StringBuilder("mytext"); for(int i=0; i<dotCount[0]; i++){ sb.append("."); } // 切回UI线程更新TextView,若不在Activity中,可用txt.post(...)替代 runOnUiThread(() -> { txt.setText(sb.toString()); }); // 更新计数器,到3个就重置回1 dotCount[0] = dotCount[0] >=3 ? 1 : dotCount[0]+1; } },0,1000);
如果你的代码不在Activity类中(比如在Dialog内部),可以把runOnUiThread替换成txt.post(() -> txt.setText(sb.toString())),同样能完成UI线程的切换。
用数组存计数器是因为Java匿名内部类只能访问“有效final”的变量,数组可以绕过这个限制,也可以用AtomicInteger,不过数组实现更简单直接。
内容的提问来源于stack exchange,提问作者user21917572
相关产品推荐
相关产品推荐

