如何实时更改TextView的内容

时间:2012-04-07 14:14:53

标签: android textview real-time

用户界面非常简单,只有一个按钮login和一个可滚动的TextView,当我按下按钮login时,100行消息将添加到TextView中,但它们会被添加同时,因为我需要处理将添加到TextView的消息,这将花费一些时间,有时应用程序似乎没有响应。我希望消息可以逐行添加到TextView。我希望TextView在每个循环中显示添加的消息行。我怎么能意识到这一点?以下是简化的主要代码:

login.setOnClickListener(new OnClickListener() {

    public void onClick(View v) {
        for(int i = 0; i < 100; i++) {
            mTextView.append("test\n");
        }
    }
}

4 个答案:

答案 0 :(得分:0)

login.setOnClickListener(new OnClickListener() {

    public void onClick(View v) {
       mTextView.setText(""); 
       for(int i = 0; i < 100; i++) {
            mTextView.setText(mTextView.getText()+"test\n");
        }
    }
}

尝试使用此代码

答案 1 :(得分:0)

使用此:

    login.setOnClickListener(new OnClickListener() {
       public void onClick(View v) {

       mTextView.setText(""); 
if (!isStopped) { 

       Acitivut.this.runOnUiThread(new Runnable() {  
        @Override  
        public void run() {   
        for(int i = 0; i < 100; i++) {
          mTextView.append("test\n");
         }
isStopped=true; 
        }  
        });  
}
      }
    }

答案 2 :(得分:0)

任何改变UI元素的东西都必须在UI线程上运行。由于您正在运行长时间循环,您的应用程序会冻结。您应该更改设计并避免在循环中更新UI,或者您可以使用运行background thread并将文本追加到StringBuilder,当循环结束时,将StringBuilder文本追加到mtextView。

同样,如果你的StringBuilder包含非常大的文本,那么将其更新到UI可能会再次冻结它。

答案 3 :(得分:0)

login.setOnClickListener(new OnClickListener() {

    public void onClick(View v) {
           i=0; 
           Thread thread=new Thread(new SleepThread());
           thread.start();
    }
}

private class SleepThread implements Runnable
{
         public void run()
         {
              sleep(10);
              handler.sendEmptyMessage();
         }
}

Handler handler=new Handler()
{
     public void handleMessage(Message msg)
     {
         mTextView.append("test\n");
         i++;
         if(i<100)
         {
              Thread thread=new Thread(new SleepThread());
              thread.start();
         }
     }
}