2012-12-28 1 views
1

TextView를 업데이트하는 루프를 만들려고합니다. 아이디어는 진행률 표시기를 만드는 것입니다.이 표시기를 사용하면 로드 우선 순위가 증가합니다.Android 루프 업데이트 TextView

이 내가 시도 것입니다,하지만 결과는 내가 루프의 마지막 업데이트를 볼 수 있다는 것입니다, 그래서 더 incremntation에 "100 %"를 얻는다.

runOnUiThread(new Runnable() { 
         public void run() { 
          final TextView progesss = (TextView)findViewById(R.id.progress); 
          for(int k=1 ; k<=100; k++) 
          { 
           progesss.setText(String.valueOf(k) + "%"); 

           try { 
            Thread.sleep(15); 
            } catch(InterruptedException e) { 
            } 
          } 
         } 
        }); 

내 목표를 달성하는 방법에 대한 아이디어가 있습니까? 감사합니다.

답변

1

귀하의 Runnable 차단 UI 스레드Thread.sleep을하고. 잠을자는 대신 새 Runnable을 다시 게시해야합니다. 이 같은 뭔가 시도 :

final Handler handler = new Handler(); 
handler.post(new Runnable(){ 
    private int k = 0; 

    public void run() { 
     final TextView progess = (TextView)findViewById(R.id.progress); 
     progess.setText(String.valueOf(k) + "%"); 

     k++; 
     if(k <= 100) 
     { 
      // Here `this` refers to the anonymous `Runnable` 
      handler.postDelayed(this, 15); 
     } 
    } 
}); 

UI 스레드 각 호출 사이에 실행할 수있는 기회를 줄 것이다, 그것은 입력을 처리하고 화면에 물건을 그리기 등의 물건을 할시키는.

+0

우수! 감사 :) –

0

배경 스레드와 UI 스레드를 사용합니다.

public class testAsync extends AsyncTask<Void, Integer, Voi>{ 

TextView progress; // You will set TextView referans 

protected void doInBackground(){ 

for(int k=1 ; k<=100; k++) 

    { 

    try { 
    Thread.sleep(1000); 
    publishProgress(k); 
    } catch(InterruptedException e) {} 
    } 
} 
protected void onProgressUpdate(Integer.. values) 
{ 
progress.setText(values[0]+"); 
} 

} 



}