Java 从方法中取消计时器

Java 从方法中取消计时器,java,android,timer,Java,Android,Timer,我在取消此方法中的计时器时遇到问题 public void nezablokovat() { int secondsToRun = 9999999; final ValueAnimator timern = ValueAnimator.ofInt(secondsToRun); timern.setDuration(secondsToRun * 1000).setInterpolator(new LinearInterpolator()); timern.addU

我在取消此方法中的计时器时遇到问题

 public void nezablokovat() {
    int secondsToRun = 9999999;
    final ValueAnimator timern = ValueAnimator.ofInt(secondsToRun);
    timern.setDuration(secondsToRun * 1000).setInterpolator(new LinearInterpolator());
    timern.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
        @Override
        public void onAnimationUpdate(ValueAnimator animation) {
            int elapsedSeconds = (int) animation.getAnimatedValue();
            int minutes = elapsedSeconds / 60;
            int seconds = elapsedSeconds % 60;

            if (seconds%10 == 1) {
                Pis("$$$");
            }
        }

        });
        timern.start();
    }
我想把
timern.cancel()
切换到
onClick
Listener中的另一个方法。 请问你有什么想法吗

如果我把
timern.cancel()
放在这里:

void teplotahore() {
    STup.setOnClickListener(
            new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    timern.cancel();
                    }
                }
            }

    );
}

编译器不知道
timern

我不知道整个类是如何构造的,但我相信您可以将“timern”“variable”移动到构造函数之外(在其上方),使其成为一个字段

字段类似于变量,但它对类中的所有方法都可见

例如:

final ValueAnimator timern = ValueAnimator.ofInt(secondsToRun);

public void nezablokovat() {
    int secondsToRun = 9999999;

    timern.setDuration(secondsToRun * 1000).setInterpolator(new LinearInterpolator());
    timern.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator animation) {
        int elapsedSeconds = (int) animation.getAnimatedValue();
        int minutes = elapsedSeconds / 60;
        int seconds = elapsedSeconds % 60;

        if (seconds%10 == 1) {
            Pis("$$$");
        }


    }

    });
    timern.start();
}

void teplotahore() {
    STup.setOnClickListener(
        new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                timern.cancel();
            }
        }

    });
}

我不知道整个类是如何构造的,但我相信您可以通过这种方式将“timern”“variable”移动到构造函数之外(在它上面),使其成为一个字段

字段类似于变量,但它对类中的所有方法都可见

例如:

final ValueAnimator timern = ValueAnimator.ofInt(secondsToRun);

public void nezablokovat() {
    int secondsToRun = 9999999;

    timern.setDuration(secondsToRun * 1000).setInterpolator(new LinearInterpolator());
    timern.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator animation) {
        int elapsedSeconds = (int) animation.getAnimatedValue();
        int minutes = elapsedSeconds / 60;
        int seconds = elapsedSeconds % 60;

        if (seconds%10 == 1) {
            Pis("$$$");
        }


    }

    });
    timern.start();
}

void teplotahore() {
    STup.setOnClickListener(
        new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                timern.cancel();
            }
        }

    });
}