2015-03-29 3 views
0

Я делаю аудиоплеер, и у меня все остальные части работают, за исключением быстрых кнопок перемотки вперед и назад.Android: onLongClickListener while - падает в бесконечный цикл и висит приложение

Я не знал, как это сделать, когда я удерживаю кнопку быстрой перемотки вперед или назад - это будет увеличивать прогресс, и когда его отпустить, он остановится и начнет играть музыку с этой части.

Я написал:

forwardButton.setOnLongClickListener(new View.OnLongClickListener() { 
     @Override 
     public boolean onLongClick(View v) { 

      while(v.isPressed()){ 
      currentProgress.setProgress((currentProgress.getProgress()+1)); 
      } 
      return false; 
     } 
    }); 

, но когда я держу вниз быстро вперед, приложение попадает в бесконечный цикл в основном и вешает вызывая андроид, чтобы дать мне возможность ждать или Прервать.

Думаю, мне нужно реализовать Runnable на нем и сделать это с помощью этого, чтобы избежать зависания, но я не уверен, как это сделать.

Помощь?

Переменные:

forwardButton = Fast Forward button. 
currentProgress = seekbar for music. 
mPlayer = music player. 
+0

Вы не можете использовать цикл while() или аналогичную операцию блокировки в событии пользовательского интерфейса. Вместо этого вы должны преобразовать свой проект в архитектуру с сохранением состояния, т. Е. Установить флаги или изменить отслеживаемое состояние для каждого действия, а затем выполнить результирующие действия, когда ваши флаги или состояние указывают, что были предприняты необходимые шаги, которые должны были вызвать это. –

ответ

1

Dont сделать это, как это. Вместо этого используйте обработчик, а внутри runnable включите свой кучер, который будет размещать setProgress() в вашей основной теме. Каждый раз, когда вы отправляете форвардный ордер, задерживаете X секунд, а затем проверяете, нажата ли кнопка, если да, то repost runnable.

+0

Сделал это, работал. благодаря – arleitiss

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