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

5

我有一个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);

    }
}

Thank you in advance.


请解释一下 每次调用 onClick 时重置时间 这行代码的含义。 - ρяσѕρєя K
你不能这样做,你需要移除挂起的回调并重新发布它。 - pskink
2个回答

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

3

每次单击时如何重置时间?

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

但是,您可以保留对您发布的 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()并使用从未发布过的Runnable(甚至是 null)。

如果您不想保留对Runnable的明确引用,可以选择将其与视图标记。只是不要忘记在旋转等情况下进行清理。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接