You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 18:12:34