2012-04-07 11 views
0

UIは非常に単純で、ボタンloginとそれにスクロール可能なTextViewしかありません。ボタンloginを押すと100行のメッセージがTextViewに追加されますが、同時に追加され、TextViewに追加するメッセージには時間がかかるため、アプリケーションが応答しないように見えることがあります。私は、メッセージがTextViewに行ごとに追加されることを願っています。私はTextViewが各ループに追加されたメッセージ行を表示したいと思っています。どうすればそれを実現できますか? UI要素を変更TextViewの内容をリアルタイムで変更する方法

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

答えて

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

それは

+0

THXが、それは私のために働くdoest :( – Searene

0

はこれを使用して動作するはずです、このコードを試してみてください。ここでは単純化された主なコードがあります糸。あなたは長い実行ループを実行しているので、あなたのアプリはフリーズします。デザインを変更して、ループ内のUIの更新を避けるか、background threadを実行してテキストをStringBuilderに追加し、ループが終了したらStringBuilderテキストをmtextViewに追加します。

また、StringBuilderに非常に大きなテキストが含まれている場合、そのテキストをUIに更新すると、再び凍結することがあります。

+0

THX、私は、変数を定義する必要がありますisStopped?私は 'ブールはisStopped = false'の(!isStopped){'もし 'の前に行を追加しようとしました、 – Searene

+0

これは別のクラスにあるので、新しい変数 'runnable(){}'で 'isStopped'を検査することはできません。ユーザーがボタンを同時に2回クリックすると、この変数bezが追加されます。 –

+0

@ MarkZar:この条件のためにあなたのロジックを作ってください –

0

ものは、UI上で実行する必要があります。

login.setOnClickListener(new OnClickListener() { 

    public void onClick(View v) { 
     for(int i = 0; i < 100; i++) { 
      mTextView.append("test\n"); 
     } 
    } 
} 
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(); 
     } 
    } 
} 
関連する問題