2014-12-22 3 views
0

Я пытаюсь создать набор кнопок, которые будут изменять значение вверх или вниз на 1 одним нажатием и быстро изменить значение, удерживая кнопку. Я не могу понять, как быстро изменить значение. Вот что у меня есть:Использование onLongClickListener для быстрого изменения значений

btPlus.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     mTempo=mTempo+1; 
     setTempo(mTempo + 1); 
     tvTempo.setText(Integer.toString(mTempo)); 
     } 
    }); 
    btPlus.setOnLongClickListener(new View.OnLongClickListener() { 
     @Override 
     public void onLongClick(View view) { 
      mTempo = mTempo + 1; 
      setTempo(mTempo + 1); 
      tvTempo.setText(Integer.toString(mTempo)); 
     } 
    });        
    btMinus.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      mTempo=mTempo-1; 
      setTempo(mTempo - 1); 
      tvTempo.setText(Integer.toString(mTempo)); 
     } 
    }); 
    btMinus.setOnLongClickListener(new View.OnLongClickListener() { 
     @Override 
     public void onLongClick(View view) { 
      mTempo = mTempo - 1; 
      setTempo(mTempo - 1); 
      tvTempo.setText(Integer.toString(mTempo)); 
     } 
    });  
    return rootView; 
} 

Благодарим за помощь.

ответ

0

Удерживание кнопки - это нечто иное, чем длительное нажатие. Вам понадобится onTouchListener

В методе onPressed проверьте, есть ли MotionEvent UP или DOWN, а затем начните/прекратите подсчет.

EDIT: Попробуйте Подсчитывая в тему, что-то вроде этого:

Final Thread t = new Thread(new Runnable(){ 
     @Override public void run(){ 
      while(!t.isInterrupted(){ 
      setTempo(mTempo++); 
      } 
     } 
switch (event){ 
case ACTION_DOWN: 
     t.start(); 
     break; 
case ACTION_UP: 
     t.interrupt(); 
     break 
} 
+0

Я могу понять, используя onTouchListener, но я все еще борется с тем, как заставить его непрерывно рассчитывать, пока кнопка нажата. Какие-нибудь дополнительные мысли? –

+0

Вы можете начать новую тему на DOWN и запустить ее. на UP вы прервите его. Поток подсчитывает время, а не прерывает цикл mTempo – Tobi

+0

Ум помогает немного больше? Он говорит, что t получает доступ из внутреннего класса и должен быть объявлен окончательным в первом случае, а затем этот t не мог быть инициализирован во втором случае. –

Смежные вопросы