TextView Text не обновляется - PullRequest
3 голосов
/ 30 июня 2011
package com.aviyehuda.test.multithreading;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MultithreadingTest extends Activity {
Button btn;
private Handler myHandler;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    btn = (Button) findViewById(R.id.Button01);
}

public void buttonClicked(View v) {
    myHandler = new Handler();
    MyThread mThread = new MyThread();
    mThread.start();
}

class MyThread extends Thread {
    @Override
    public void run() {
        for (int i = 0; i < 30; i++) {
            myHandler.post(new NewThreaad(i));
        }
    }
}
class NewThreaad implements Runnable{
    int i;
    public NewThreaad(int n) {
        i=n;
    }
        @Override
        public void run() {
            ((TextView) findViewById(R.id.TextView01)).setText("Hello:"+i);
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
}
}

У меня есть код, упомянутый выше, но я получаю результат Hello29 в TextView, но я хочу Hello1, Hello2, hello3 ................. Hello29 по одному автоматически

Пожалуйста, дайте мне подсказку, что я делаю неправильно

Ответы [ 3 ]

2 голосов
/ 30 июня 2011

Ну, главная проблема в том, что вы не добавляете вы перезаписываете . Вместо

 ((TextView) findViewById(R.id.TextView01)).setText("Hello:"+i);

сделать

  TextView tv = ((TextView) findViewById(R.id.TextView01));
  String text = tv.getText().toString();
  tv.setText(text + " Hello:" + i);
2 голосов
/ 30 июня 2011

Пара вещей.

Во-первых, после изменения текста вы должны вызвать invalidate в TextView для принудительного обновления.

Во-вторых, чтобы выполнить операцию с пользовательским интерфейсом, вы должны запустить ее в потоке пользовательского интерфейса. Использовать runOnUiThread

0 голосов
/ 30 июня 2011

Вам необходимо переместить задержку 500 мс в цикл for между публикацией сообщений. Я думаю, вы ожидаете, что сообщения будут выполняться последовательно одно за другим, но они этого не делают, поэтому вы просто видите результат последнего.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...