[android]StartTimer() 应调用后 button click 事件完成,但它在 onclick 事件之前得到执行

发布时间: 2016/9/26 3:57:13
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

StartTimer() 函数应调用后 button click 事件完成,但它是如何停止计时器 onclick 事件之前和之后 onclick 事件开始在 onclick 事件。 ro 之前执行。

如何解决此问题?

        btn1=(Button)findViewById(R.id.button);
        btn2=(Button)findViewById(R.id.button2);
        btn3=(Button)findViewById(R.id.button3);
        timer = new Timer();

        btn1.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v) {
                timer.cancel();
                Toast.makeText(getApplicationContext(), "Button1", Toast.LENGTH_SHORT).show();
            }
        });
        StartTimer();

        btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                timer.cancel();
                Toast.makeText(getApplicationContext(), "Button2", Toast.LENGTH_SHORT).show();
            }
        });
        StartTimer();

        btn3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                timer.cancel();
                Toast.makeText(getApplicationContext(), "Button3", Toast.LENGTH_SHORT).show();
            }
        });
    }

    public void StartTimer()
    {
        timer = new Timer();
        timer.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                Log.v("timer", "Timer running");
            }
        }, 0, 5000);

        Toast.makeText(getApplicationContext(), "Timer", Toast.LENGTH_LONG).show();
    }

    protected void onResume() {
        super.onResume();
        StartTimer();
    }
}

解决方法 1:

那里已经内置的 Timer 类的 android 。所以你可以像这样︰

    import java.util.Timer;

    Timer timer = new Timer();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                Log.v("timer", "Timer running");
                Toast.makeText(getApplicationContext(), "TIMER HAS FINISHED", Toast.LENGTH_SHORT).show();
            }
        }, 0, 5000);

        btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                timer.cancel();
                Toast.makeText(getApplicationContext(), "Button1", Toast.LENGTH_SHORT).show();
            }
        });

        StartTimer();

        btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                timer.cancel();
                Toast.makeText(getApplicationContext(), "Button2", Toast.LENGTH_SHORT).show();
            }
        });

        btn3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                timer.cancel();
                Toast.makeText(getApplicationContext(), "Button3", Toast.LENGTH_SHORT).show();
            }
        });

所以只需启动计时器 onCreate ,让它停止时 button 单击。

官方微信
官方QQ群
31647020