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

时间:2015-11-20 13:31:39

标签: android mobile 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);

    }
}

提前谢谢。

2 个答案:

答案 0 :(得分:12)

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

首先,将回调设置为

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);

答案 1 :(得分:2)

  

每次调用onClick时如何重置时间?

没有内置机制来实现这一目标。

但是,您可以保留对您发布的Runnable的引用,将其删除,然后重新发布,以便在原始延迟时重新启动。

结果看起来有点像最简单的形式:

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);
    }
}

您可以安全地使用从未发布过removeCallbacks()的{​​{1}}来拨打Runnable。或者null

如果您不想明确引用Runnable,您还可以选择使用它标记视图。只是不要忘记清理方向变化等。