2012-04-07 3 views
0

пользовательский интерфейс очень прост, только с кнопкой login и прокручиваемым TextView на нем, когда я нажимаю кнопку login, 100 текстовых сообщений добавят в TextView, но они добавлено в то же время, и потому, что мне нужно делать сообщения, которые будут добавлены в TextView, что будет стоить несколько раз, иногда приложение выглядит без ответа. Я надеюсь, что сообщение может добавить TextView по строкам. IOW, я хочу, чтобы TextView отображал добавленную строку сообщения в каждом цикле. как я могу это понять? Вот основной код, который был упрощен:Как изменить содержимое TextView в реальном времени

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) { 
     mTextView.setText(""); 
     for(int i = 0; i < 100; i++) { 
      mTextView.setText(mTextView.getText()+"test\n"); 
     } 
    } 
} 

Попробуйте этот код, он должен работать

+0

ТНХА, но это делает работу для меня :( – Searene

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

ТНХА, но где я должен определить переменную IsStopped? Я пытался добавить строки логического значения 'IsStopped = false' перед тем' если (! IsStopped) { ', но 'isStopped' не может быть проверен в' new Runnable() {} ', потому что его в другом классе. – Searene

+0

, если он работает нормально, то оставьте его. Я добавил эту переменную bez, если пользователь дважды нажимает на кнопку одновременно, а затем предотвращает ее. –

+0

@MarkZar: пожалуйста, сделайте свой логический для этого условия –

0

Все, что изменяет элемент пользовательского интерфейса, должны работать на пользовательском интерфейсе нить. Так как вы используете длинный цикл, ваше приложение зависает. Вы должны либо изменить дизайн, либо не обновлять интерфейс в цикле, либо использовать запустите background thread и добавьте текст в StringBuilder, а когда цикл закончен, добавьте текст StringBuilder в mtextView.

Опять же, если ваш StringBuilder содержит очень большой текст, обновление этого интерфейса может снова заморозить его.

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(); 
     } 
    } 
} 
Смежные вопросы