2016-08-05 2 views
0

회 전자를 두 번 누르면 두 개의 메뉴가 표시됩니다. 두 번 탭을 사용 중지하는 방법은 무엇입니까?안드로이드에서 회 전자를 두 번 탭하는 것을 비활성화하는 방법은 무엇입니까?

private static final int CLICK_DELAY = 500; 
private long lastMenuClickTime = 0; 

actionsSpinner.setOnTouchListener(new View.OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      if (event.getAction() == MotionEvent.ACTION_DOWN) { 
      if (SystemClock.elapsedRealtime() - lastMenuClickTime > CLICK_DELAY) { 
       lastMenuClickTime = SystemClock.elapsedRealtime(); 

       return false; 
      } 
      } 
      return true; 
     } 
     }); 

아래와 같이

TouchListeners을 추가하는 시도하지만이 CLICK_DELAY이 작동하지 않는 후에도 첫 번째 클릭은 클릭 작동 및 주요 문제를 실행에 약간의 지연을 추가합니다.

답변

1

이 사용자가 지정한 시간 동안

public static void disableTouch(final View v, long timeInMiliSec) { 
     v.setEnabled(false); 
     new Handler().postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       v.setEnabled(true); 
      } 
     }, timeInMiliSec); 
    } 

이 기능은 비활성화보기를 할 수있는 방법입니다

예 :

actionsSpinner.setOnTouchListener(new View.OnTouchListener() { 

    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     if (event.getAction() == MotionEvent.ACTION_DOWN) { 
      disableTouch(actionsSpinner, CLICK_DELAY) 
      //do your other stuff here 

      return false; 
     } 
     return true; 
    } 
    }); 
+0

우리가 OnClickListener를가 (그 버튼이 아니라) 스피너에 추가 할 수 없습니다 그래서 나는 스피너의 클릭에 disableTouch()를 걸 수 없다! – kumar

+0

수정 된 답변 죄송합니다. 실수로보기에는 매개 변수를 전달할 수 있습니다. 'onTouch()'에서'disableTouch()'를 호출하십시오. –

+0

disableTouch()를 호출 할 시점이 무엇입니까? 스피너가 생성 된 후에 호출하면 생성 후 CLICK_DELAY 후에 스피너가 활성화됩니다. 스피너가 지원하지 않으므로 onClickListener로 호출 할 수 없습니다! – kumar

관련 문제