我有一个包含四个按钮的 Activity,它们在单击时都会触发相同的 onClick() 方法。我想防止该方法的并发调用/访问。
- 当 button1 被单击时,onClick() 方法会导致水平滚动的 Scrollview 滚动几个像素并显示另一个视图。
- 这个新显示的视图有一个后退按钮,可以滚动回上一个位置。[到目前为止,一切都按预期进行]。
问题:
如果在 Activity 中同时按下两个按钮(或仅相隔几毫秒),那么我的自定义滚动方法会在完成第一个按钮单击执行之前再次调用。
试用案例:
- 将synchronized关键字与方法一起使用,该方法是从按钮的 onClick 与 UI 线程调用的。[不工作]
- 尝试在 onClick() 执行期间将“静态布尔标志”设置为 true,并在 onClick() 中立即检查它,如果为 true,则返回。[不工作]
相关代码:
private OnClickListener mClickListener = new View.OnClickListener() {
@Override
public void onClick(View view) {
int viewId = view.getId();
//Proshop top icon
if(viewId == R.id.proshop_icon){
if(hasClicked){
return;
}
hasClicked = true;
mProShopIconTop.startAnimation(proShopButtonAnimation());
if(mHScrollView.getCurrentChildIndex() == 0){
addAndMoveToSecondPage(mProshopPageView, true);
} else {
addAndMoveToSecondPage(mProshopPageView, false);
}
hasClicked = false;
}
//Tune top icon
else if(viewId == mTuneIconTop.getId()){
if(hasClicked){
return;
}
hasClicked = true;
mTuneIconTop.startAnimation(tuneButtonAnimation());
if(mHScrollView.getCurrentChildIndex() == 0){
addAndMoveToSecondPage(mTunePageView, true);
} else {
addAndMoveToSecondPage(mTunePageView, false);
}
hasClicked = false;
}
//bottom and top aiConnect button
else if(viewId == mAiConnect.getId() || viewId == mAiConnectIconTop.getId()){
if(hasClicked){
return;
}
hasClicked = true;
mAiConnectIconTop.startAnimation(aiConnectButtonAnimation());
if(mHScrollView.getCurrentChildIndex() == 0){
addAndMoveToSecondPage(mAIConnectPageView, true);
} else {
addAndMoveToSecondPage(mAIConnectPageView, false);
}
hasClicked = false;
}
//DR page play game button
else if(viewId == mPlayGame.getId()){
if(hasClicked){
return;
}
hasClicked = true;
playGolfClick();
addAndMoveToSecondPage(mGameMenuPageView, true);
hasClicked = false;
}
}
}
这是我从 onCLick 调用的代码。
private void addAndMoveToSecondPage(View view, boolean withScroll){
mHScrollView.removePage(1);
mHScrollView.addPage(view, 1);
if(withScroll){
mHScrollView.moveToNextView();
}
view.setVisibility(View.VISIBLE);
}
mHScrollView是我自定义的 HorizontalScrollView 的实例,我在 CustomHorizontalScrollView 中合并了下面的方法,它是 HorizontalScrollView 的子类。
public void moveToNextView(){
smoothScrollTo(getScrollX() + mScreenWidth, 0);
}
任何帮助将不胜感激..提前谢谢..!!