循环后发生的view.setText?

时间:2013-12-07 14:47:49

标签: 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”出现。

如何让它一次写一个字符,就像打字机一样。

由于

2 个答案:

答案 0 :(得分:1)

您需要使用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"

答案 1 :(得分:0)

在TextView中存在2个不同的方法setText。

  • public final void setText(int resid)
  • public final void setText(CharSequence text)

当你在setText中放入变量int时,android尝试在相同代码中的classe R变量中找到String。 要解决此问题,请使用String.valueOF(...)

将int强制转换为字符串

了解更多; http://developer.android.com/reference/android/widget/TextView.html#setText(java.lang.CharSequence)

http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#valueOf(int)

       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();
            }
        }
    }