我的程序只显示了我的最后一个值

时间:2013-09-05 19:58:47

标签: android multithreading textview

为什么这个程序只显示了textview中i = 4的最后一个值。

    Public class MainActivity extendsActivity {
        TextView counter;
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            counter = (TextView) findViewById(R.id.TV_counter);
            Thread t = new Thread() {
                public void run() {
                    runOnUiThread(new Runnable() {
                        public void run() {
                            for (int i = 0; i < 5; i++) {
                                try {
                                    counter.setText("" + i);
                                    System.out.println("Value of i= " + i);
                                    sleep(100);
                                } catch (InterruptedException e) {
                                    e.printStackTrace();
                                }
                            }
                        }
                    });
                }
            };
            t.start();
        }
    }

4 个答案:

答案 0 :(得分:0)

sleep(100) 

睡眠不是很长。您可能只是没有注意到它正在快速更新字段。尝试将睡眠时间增加到1000

答案 1 :(得分:0)

我不完全确定你要做什么,但我认为这就是你所需要的。此外,正如其他人所说,你可能想要增加睡眠时间,只是为了确保它的工作。 1000毫秒呢?

Thread t = new Thread()
{
   public void run() 
   {
      for(int i=0;i<5;i++)
      {
          runOnUiThread(new Runnable() 
          {
             public void run() 
             {
                try 
                {
                   counter.setText(""+i );
                   System.out.println("Value of i= "+i);
                }      
                catch (InterruptedException e) 
                {
                   e.printStackTrace();
                 }
              }
           });
           sleep(100);
      }
   });
}

编辑: 另外,您应该知道,在您当前的实现中,正在UI线程上执行sleep()方法,这是(我猜)你不想要的。在此实现中,睡眠正在runnable上运行。

答案 2 :(得分:0)

增加睡眠时间,以便人眼可以看到变化。

sleep(2000); 

(或)连接计数器的现有文本

counter.setText(counter.getText()+i);

但你检查了你的控制台吗?因为它必须有 值i = 1到4

答案 3 :(得分:-1)

您应该发布在MainThread上执行的setText,它很简单:

counter.getHandler().post(new Runnable(){public void run(){counter.setText("" + i);}});