Java view.setText是否在循环后发生?

Java view.setText是否在循环后发生?,java,android,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.setOn

我是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();
            }
        }
    }
public void loopCode()
{
String code=“你好”;
TextView视图=(TextView)findViewById(R.id.code_txt);
字符串s=“”;
对于(int i=0;i
但是,当我在手机上运行它时,文本不会被追加,直到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为止。您可以应用相同的逻辑

我向一个问题提供了这一点:

[编辑]

试试这个:

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=0
String code=“Hello There”

文本视图中存在两种不同的方法setText

  • 公共最终无效设置文本(整数剩余)
  • 公共最终void setText(字符序列文本)
当您将变量int放入setText时,android会在同一代码中尝试在classer变量中查找字符串。 要解决此问题,请使用string.valueOF(…)将int强制转换为string

看到更多的信息;

试一试

public void loopCode()
{
String code=“你好”;
TextView视图=(TextView)findViewById(R.id.code_txt);
字符串s=“”;
对于(int i=0;i
您需要追加文本not setextDescription Resource Path Location Type不能引用在不同方法MainActivity.java中定义的内部类中的非最终变量i
       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++)
        {

           view.setText(String.valueOf(i));
           try {
               TimeUnit.SECONDS.sleep(1);
            } catch(InterruptedException ex) {
                Thread.currentThread().interrupt();
            }
        }
    }