2013-07-26 8 views
0

После долгого времени, наконец, я узнал, как обновлять индикатор выполнения при нажатии кнопки. Этот код не работает для пряников. и все остальные ОС отлично работают. в случае любого вопроса вы можете попросить понравится !!!!Обновление индикатора выполнения Пока кнопка нажата

  button.setOnTouchListener(new OnTouchListener() { 

       @Override 
       public boolean onTouch(View arg0, MotionEvent arg1) { 
        if(arg1.getAction()==MotionEvent.ACTION_DOWN){ 

         arg0.post(rotationRunnable); 

        } 
        return false; 
       } 
    }); 

RotationRunnable Метод: -

private Runnable rotationRunnable = new Runnable() { 
     @Override 
     public void run() { 

      if (button.isPressed()) { 
       try{ 
       if(mProgressStatus<100){ 
        Thread.sleep(500); 

        mProgressStatus = doWork(); 
        pB.setProgress(mProgressStatus); 
       } 
       }catch(Exception e) { 
        e.printStackTrace(); 
       } 
       button.postDelayed(rotationRunnable, 40); 
      } 
     } 
    }; 

и, наконец DoWork Метод: -

     private int doWork() { 
     // TODO Auto-generated method stub 
     Timer t=new Timer(); 
     t.schedule(new TimerTask() { 

      @Override 
      public void run() { 
       // TODO Auto-generated method stub 
       mProgressStatus=mProgressStatus+1; 
      } 
     }, 1000); 
     time=mProgressStatus; 
     return mProgressStatus; 
    } 
+0

Итак, можете ли вы подтвердить вопрос: «Почему это не работает на пряников?» –

+0

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

ответ

0

Проблема может быть Thread.sleep(500) вы используете. Это может блокировать основной поток. В целом ваш код немного сбивает с толку. Вы используете 3 разных момента для вашего прогресса (thread.sleep из 500, 40 мс отложенной публикации, а также timertask)? не могли бы вы просто сделать

private Runnable rotationRunnable = new Runnable() { 
    @Override 
    public void run() { 

     if (button.isPressed()) { 
      mProgressStatus++; 
      pB.setProgress(mProgressStatus); 
      button.postDelayed(rotationRunnable, 1000); 
     } 
    } 
};