0

为什么这个程序只显示了 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

4 回答 4

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

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

于 2013-09-05T20:09:59.087 回答
0

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

sleep(2000); 

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

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

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

于 2013-09-05T20:10:40.343 回答
0
sleep(100) 

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

于 2013-09-05T20:02:50.660 回答
-1

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

counter.getHandler().post(new Runnable(){public void run(){counter.setText("" + i);}});
于 2013-09-05T20:14:33.807 回答