2013-07-26 4 views
0

오랜 시간이 지나면 단추를 누르는 동안 진행률 표시 줄을 업데이트하는 방법을 알게되었습니다. 진저 브레드는이 코드가 작동하지 않습니다. 및 다른 모든 OS가 제대로 작동합니다. 문의 사항이 있으시면 언제든지 문의 해주세요. !!!!진행률 표시 줄 업데이트 중 버튼을 누르는 중

  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

그래,이 코드는 진저 브레드에서 실행되지만 진저 브레드 OS에서 실행되는 장치는 진행률 표시 줄을 표시 할 수 없었습니다 ..... –

답변

0

문제는 Thread.sleep(500) 사용중인 될 수 있습니다. 주 스레드를 차단하고있을 수 있습니다. 전반적으로 코드가 다소 혼란 스럽습니다. 당신은 3 가지 다른 것들을 사용하여 진행 상황을 추적합니다 (thread.sleep 500, 지연된 게시 40ms 및 timertask). 당신은 할 수 없었습니까

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

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