2012-03-17 4 views
0

실시간 카운터를 작성하고 싶습니다. 스레드를 사용하려고했지만, 안드로이드에서만 액티비티 스레드가 뷰를 터치 할 수 있다고 경고했습니다. 나는 runOnUiThread으로 해결책을 찾았지만 너무runOnUiThread, TextView 변경

public class CounterInRealTimeExampleActivity extends Activity { 
     private TextView textView; 
     /** Called when the activity is first created. */ 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      LinearLayout layout = new LinearLayout(this); 
      textView = new TextView(this); 
      textView.setTag(new Integer(0)); 

      layout.addView(textView); 
      setContentView(layout); 
      runOnUiThread(new Runnable() { 

       @Override 
       public void run() { 
        //while(true) 
        { 
         try { 
          Thread.sleep(3000); 
         } catch (InterruptedException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } 
         increment(); 
        } 
       } 
      }); 
     } 
     public void increment() { 
      textView.setTag(new Integer((Integer)textView.getTag())+1); 
      textView.setText(Integer.toString((Integer)textView.getTag())); 
     } 
    } 
+0

당신은 http://developer.android.com/reference/android/os/CountDownTimer.html을 시도 했습니까? – Calvin

답변

4

내가 여기에 붙여 넣기 코드입니다 작동하지 않습니다. 수도 당신을 도울 ..

class UpdateTimeTask extends TimerTask {  

    public void run() { 

     String time = DateUtils.now("hh:mm:ss'T'a");    
     String[]arrValues = time.split("T"); 
     if(arrValues.length>0) { 
      String strValue= arrValues[0]; 
      String []arrTimeValues = strValue.split(":"); 
      String strValue1= arrTimeValues[2]; 
      setTimertext(strValue1);     
     }      
    } 

    public void setTimertext(String strValue) {   
     runOnUiThread(new Runnable() { 
      public void run() { 
       FinalTime=timer_time--;     
       btnTimer.setText(String.valueOf(FinalTime));  
      } 
     }); 
    } 

} 
+1

대단히 감사합니다 (저의 낮은 평판으로 인해 투표를 할 수 없지만 그럴 것입니다; p – test30

+1

okey 문제 없음, 평판은 중요하지 않지만이 솔루션이 도움이된다면 정말 행복합니다.) 감사합니다 – Hasmukh

3
Thread.sleep(3000); 

은 확실히 문제입니다. UI 스레드를 차단할 수 없습니다. 정확히 sleep입니다. UI를 업데이트하려면 runOnUiThread 내에서 코드를 실행해야합니다.

2

하나를 작업 Hasmukh 팁 후 발견 솔루션은

package com.android.examples; 

import java.util.Calendar; 

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.LinearLayout; 
import android.widget.TextView; 

public class CounterInRealTimeExampleActivity extends Activity { 
    private TextView textView; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     LinearLayout layout = new LinearLayout(this); 
     textView = new TextView(this); 
     layout.addView(textView); 
     setContentView(layout); 

     new Thread(new Runnable() { 

      @Override 
      public void run() { 
       while (true) { 

        updateTime(); 
        try { 
         Thread.sleep(1000); 
        } catch (InterruptedException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
       } 

      } 
     }).start(); 
    } 

    private void updateTime() { 
     runOnUiThread(new Runnable() { 

      @Override 
      public void run() { 
       textView.setText(Integer.toString((int) (Calendar.getInstance() 
         .getTimeInMillis()/1000) % 60)); 
      } 
     }); 
    } 
} 
+0

그게 다야 ... – Hasmukh

관련 문제