2013-07-26 1 views
-1

У меня есть один метод, доступ к которому осуществляется нажатием четырех кнопок, я хочу предотвратить одновременный вызов/доступ к этому методу.Android: кнопка onClick проблема параллелизма

Примечание: Деятельность имеет 4 кнопки.

  1. Я вызываю метод и прокручиваю горизонтальное прокрутку несколько пикселей и отображаю другой вид при нажатии кнопки1.
  2. Новый отображается вид, имеющий кнопку назад, чтобы прокрутить назад к предыдущей позиции [до здесь хорошо]

Проблема:.

От активность нажмите две кнопки вместе или [промежуток времени между обоими будет в миллисекундах], тогда мой метод настройки прокрутки снова вызовет перед завершением первого нажатия кнопки.

Пробовал Корпус:

  1. синхронизируется с методом, он вызывается из OnClick кнопки с UI потока. [Не работает] [Не работает] Не работает
  2. Пробуренный «статический булевский флаг», когда кнопка «кликнуть», а затем первая строка, проверяет, является ли флаг истинным или плоским, если 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); 
} 

Любая помощь будет оценена .. Спасибо заранее .. !!

+2

Знаете ли вы, что означает Constant? ;) –

+0

То, что я знаю, но «hasClicked» не является постоянным. Его переменная, объявленная мной в моем классе Constants.java. ** public static boolean hasClicked = false; ** –

+0

Почему у вас нет этой переменной в классе, из которого выше код? –

ответ

1

Причина, по которой возникают проблемы, заключается не в параллелизме (поскольку оба метода называются последовательно в потоке пользовательского интерфейса), а из-за того, что две ваши анимации запускаются одновременно. Итак, что вам нужно сделать, это setAnimationListener для вашей анимации и запретить события щелчка до тех пор, пока onAnimationEnd(Animation animation) не будет вызываться. Таким образом, в настоящий момент у вас будет только одна анимация.

+0

Это мой вопрос, как предотвратить onClick всех кнопок, пока выполняется какое-либо действие onClick на кнопке. –

+0

Анимация применяется только при видимости кнопки с альфой, но у меня проблема с ScrollView, я попробовал второй пункт, о котором я упоминаю, почему это не работает? PLS –

+0

, тогда вы должны отправить код в свой 'addAndMoveToSecondPage (mProshopPageView, true);' метод – Desert