У меня есть один метод, доступ к которому осуществляется нажатием четырех кнопок, я хочу предотвратить одновременный вызов/доступ к этому методу.Android: кнопка onClick проблема параллелизма
Примечание: Деятельность имеет 4 кнопки.
- Я вызываю метод и прокручиваю горизонтальное прокрутку несколько пикселей и отображаю другой вид при нажатии кнопки1.
- Новый отображается вид, имеющий кнопку назад, чтобы прокрутить назад к предыдущей позиции [до здесь хорошо]
Проблема:.
От активность нажмите две кнопки вместе или [промежуток времени между обоими будет в миллисекундах], тогда мой метод настройки прокрутки снова вызовет перед завершением первого нажатия кнопки.
Пробовал Корпус:
- синхронизируется с методом, он вызывается из OnClick кнопки с UI потока. [Не работает] [Не работает] Не работает
- Пробуренный «статический булевский флаг», когда кнопка «кликнуть», а затем первая строка, проверяет, является ли флаг истинным или плоским, если true, а затем возвращает в противном случае его продолжение, а falg - «true» и метод вызова после этой последней строки под флагом установки onClick - «false». [Не работает]
Связанные Код:
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 является экземпляром HorizontalScrolView, настроенный мною ниже метод я включен в мой CustomHorizontalScrolView какой суб класс HorizontalScrolView.
public void moveToNextView(){
smoothScrollTo(getScrollX() + mScreenWidth, 0);
}
Любая помощь будет оценена .. Спасибо заранее .. !!
Знаете ли вы, что означает Constant? ;) –
То, что я знаю, но «hasClicked» не является постоянным. Его переменная, объявленная мной в моем классе Constants.java. ** public static boolean hasClicked = false; ** –
Почему у вас нет этой переменной в классе, из которого выше код? –