如何在 onClick 中重置 postDelayed runnable 的时间?

How can I reset the time of a postDelayed runnable in onClick?

我有一个从服务器填充的 listView。在 ListItem 的 onClick 中,我显示一个按钮 x 秒,然后再次使其不可见。每次调用 onClick 时如何重置时间? 这是我的 listItem onClick:

private void displayInCallButton() {


    mButton.setEnabled(true);

    if (canDisplayInCallControlls) {
        canDisplayInCallControlls = false;

        fadeInAnimation(mButton);
        mButton.setEnabled(true);

        mFrontView.postDelayed(new Runnable() {
            public void run() {
                fadeOutAnimation(mButton);
                mButton.setEnabled(false);
                hasAnimationEnded = true;
                canDisplayInCallControlls = true;


            }
        }, 5000);

    }
}

提前致谢。

How can I reset the time every time the onClick is called?

没有内置机制可以实现这一点。

但是,您可以保留对 Runnable 您 post 的引用,将其删除,然后重新post 以按原来的延迟重新启动。

结果在最简单的形式下看起来有点像这样:

Runnable mDelayedRunnable = new Runnable() {
    @Override public void run() {
            fadeOutAnimation(mButton);
            mButton.setEnabled(false);
            hasAnimationEnded = true;
            canDisplayInCallControlls = true;
        }
    };

private void displayInCallButton() {
    mButton.setEnabled(true);

    if (canDisplayInCallControlls) {
        canDisplayInCallControlls = false;

        fadeInAnimation(mButton);
        mButton.setEnabled(true);

        mFrontView.removeCallbacks(mDelayedRunnable);
        mFrontView.postDelayed(mDelayedRunnable, 5000);
    }
}

您可以安全地使用 Runnable 调用 removeCallbacks(),而 Runnable 一开始就没有 post(甚至 null)。

如果您不想保留对 Runnable 的显式引用,您也可以选择用它来标记视图。只是不要忘记清理方向变化等。

您必须删除回调并使用具有重置时间的新回调再次设置它。

首先,将回调设置为

Runnable myRunnable = new Runnable() {
   @Override
   public void run() {
    fadeOutAnimation(mButton);
    mButton.setEnabled(false);
    hasAnimationEnded = true;
    canDisplayInCallControlls = true;
   }
};

然后将其设置为 mFrontView 之类的,

mFrontView.postDelayed(myRunnable,5000)

如果你想重置,像

那样做
mFrontView.removeCallbacks(myRunnable);
mFrontView.postDelayed(myRunnable, 2000);