如何在 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);
我有一个从服务器填充的 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);