java - view.setText 发生在循环之后?

标签 java android

我是 Android 编程新手。我在单击按钮时发生以下代码

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final Button button = (Button) findViewById(R.id.morse_btn);

    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            loopCode();
        }
    });
}

这称为:

    public void loopCode()
{
        String code = "Hello There";
        TextView view = (TextView) findViewById(R.id.code_txt);
        String s = "";
        for(int i = 0; i < code.length(); i++)
        {
           s+=code.charAt(i);
           view.setText(s);
           try {
               TimeUnit.SECONDS.sleep(1);
            } catch(InterruptedException ex) {
                Thread.currentThread().interrupt();
            }
        }
    }

但是当我在手机上运行它时,直到 for 循环结束后才会附加文本,即我按下按钮,几秒钟后,整个字符串“Hello There”就会出现。

我怎样才能让它一次写一个字符,就像打字机一样。

谢谢

最佳答案

您需要使用 view.append("") 它将新文本附加到现有文本。

试试这个代码:

int i = 0; //declare this globally
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
    @Override
    public void run() {
        if(i != 10) { 
                text.append(" " + i);
                i++;
                handler.postDelayed(this, 1000);
            }
        }
    }, 1000);
}

此代码将每隔一秒向 TextView 追加一个新数字,直到达到计数 10。您可以应用相同的逻辑。

我已经提供了这个solution一个问题here -

[编辑]

试试这个:

String code = "Hello There"; //declare variable globally
int i = 0; //declare globally
TextView view; //declare globally

public void loopCode()
    {
                view = (TextView) findViewById(R.id.code_txt);
                //String s = "";
                final Handler handler = new Handler();
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        if(i != code.length()) { 
                                view.append(" " + code.charAt(i));
                                i++;
                                handler.postDelayed(this, 1000);
                            }
                        }
                    }, 1000);
                }
     }

不要忘记全局声明 int i = 0String code = "Hello There"

关于java - view.setText 发生在循环之后?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20442679/

相关文章:

Java 休息网络服务 : '+' character inside String param is treated as space character

java - 为什么我的网页在 Spring WebFlow 重定向后过期了?

java - 我可以将 Android 应用程序转换为 iPhone/iPad 应用程序吗?

android - 单击按钮启用和禁用广播接收器

Android AudioManager.setMode(MODE_NORMAL) 失败

android - sqlite查询错误: Invalid Column Type

android - 何时使用静态 fragment

java - jxls、Jasper 报告或 BIRT

java - JPA (Hibernate) 上的多个双向映射问题

android - 使用 adt r17 转换为 dalvik 格式失败,出现错误 1