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

为何‘视频加载’按钮文本无法循环切换?求技术排查

问题分析与解决方案

你的代码失效的核心原因是:单次Runnable.run()方法执行时,会同步完成三次setText操作——这些操作没有任何延迟,按钮文本会瞬间被最后一次的「Video loading...」覆盖。后续的postDelayed只是把这个Runnable重新加入消息队列,但下次执行时还是会重复同样的步骤,导致按钮全程只显示三个点。

而你之前的倒计时代码能正常工作,是因为每次run()只执行一次setText,然后通过postDelayed让下一次执行间隔1秒,文本更新是分步的。


修正后的代码实现

首先在类中添加一个成员变量,用来跟踪当前加载文本的点数量:

private int loadingDotCount = 1; // 1-3循环,记录当前显示的点数量

然后修改Runnable逻辑,让每次run()只更新一次文本,并循环切换状态:

public Runnable CountDown = new Runnable() {
    public void run() {
        // 优先检查广告是否加载完成,触发结束逻辑
        if (rewardedInterstitialAd != null) {
            btnVideoStarts.setText("Start video");
            handler.removeCallbacks(this);
            loadingDotCount = 1; // 重置状态,方便后续再次触发加载
            return;
        }

        // 根据当前点数量设置对应的加载文本
        String loadingText;
        switch (loadingDotCount) {
            case 1:
                loadingText = "Video loading.";
                break;
            case 2:
                loadingText = "Video loading..";
                break;
            default:
                loadingText = "Video loading...";
                break;
        }
        btnVideoStarts.setText(loadingText);

        // 更新点数量,实现1→2→3→1的循环
        loadingDotCount = loadingDotCount % 3 + 1;

        // 延迟1秒后再次执行当前Runnable
        handler.postDelayed(this, 1000);
    }
};

逻辑说明

  1. 每次run()先检查广告状态,一旦广告加载完成,立即切换按钮文本并停止循环,同时重置点数量状态。
  2. 若广告未加载完成,根据当前的点数量设置对应文本,然后更新点数量实现循环。
  3. 通过postDelayed让下一次文本更新间隔1秒,确保用户能看到文本切换的效果。

内容的提问来源于stack exchange,提问作者Binbows

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 15:45:23