我有一个从服务器填充的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);
}
}
提前谢谢。
答案 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
,您还可以选择使用它标记视图。只是不要忘记清理方向变化等。