0

1秒ごとにスケジュールするタイマーがあり、タイマータスクで乾杯できないため、handler.post()を使用しました。しかし、このコードは私のアプリを壊します:

    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_game);

    handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            String text = (String) msg.obj;
            sec_view.setText(text);
        }
    };

    MyTimerTask myTask = new MyTimerTask();
    timer = new Timer();
    timer.schedule(myTask, 1000, 1000);
}

Runnable makeToast = new Runnable() {
    public void run() {
        Toast.makeText(null, "qwerty", Toast.LENGTH_LONG).show();
    }
};


class MyTimerTask extends TimerTask {
    public void run(){
        if(0 == --sec){
            handler.post(makeToast);  //breaks there
            timer.cancel();
        }
        Message msg = new Message();
        msg.obj = sec+" sekund";
        handler.sendMessage(msg);
    }
}

タイマータスクから乾杯するために何か他のものを使用できますか?

4

2 に答える 2

1

現在、トーストを表示するには、nullではなくnullコンテキストを渡すだけでコンテキストとして 渡します。Toast.makeText

Toast.makeText(Your_Activity.this, "qwerty", Toast.LENGTH_LONG).show();

トーストを表示したり、timertask runメソッドからUI要素にアクセスしたりするには、runOnUiThread()を次のように使用します。

public void run() {
  Current_Activity.this.runOnUiThread(new Runnable() {
     @Override
     public void run() {
          //show your toast here
       }
    });
}
于 2013-01-20T07:31:04.490 に答える
0

トーストを

Toast.makeText(getApplicationContext()、 "qwerty"、Toast.LENGTH_LONG).show();

次に、ハンドラーのvoidrunの上に@overrideアノテーションを追加します

于 2013-03-23T02:20:14.783 に答える