-2

タイマーの使い方を理解しようとしています。

私の MainActivity.class の create メソッド内に、このコードがあります

  Timer  timer = new Timer();
  TimerTask updateM = new GestioneSlide();
  timer.scheduleAtFixedRate(updateM , 1000, 5000); // i want to do a thing every second   for 5 seconds

次に、メソッドの実行をオーバーライドする別のクラスがあり、MainActivity.class にある texview に何かを書きたい

class GestioneSlide extends TimerTask {


        @Override
       public void run() {
            MainActivity.TextViewName.setText("bla  bla");
            }

    }

アプリがクラッシュします。削除しMainActivity.TextViewName.setText("bla bla");ても問題ありません。おそらく、そのテキストビューにそのように書くことはできません。何が間違っていましたか?

4

2 に答える 2

1

Handler を作成し、Handler 内に msg を表示します。

  private class mainTask extends TimerTask
            { 
                public void run() 
                {
                    toastHandler.sendEmptyMessage(0);
                }
            } 
    private final Handler toastHandler = new Handler()
            {
                @Override
                public void handleMessage(Message msg)
                {
                    Toast.makeText(getApplicationContext(), "test", Toast.LENGTH_SHORT).show();
                }
            };
于 2013-01-08T08:00:10.140 に答える
1

タイマーは、GUI スレッドでアクションを開始しません。runOnUiThreadを使用して切り替えます。GestioneSlide がアクティビティの内部クラスであると仮定すると、次のように記述します。

   class GestioneSlide extends TimerTask {

   public void run() {
     runOnUiThread(new Runnable() {
        public void run() {
           MainActivity.TextViewName.setText("bla  bla");
        }
     }
   }
于 2013-01-08T07:51:11.157 に答える