2012-01-30 2 views
0

확인하면 일정 기간 후에 내 ToggleButton을 선택 해제하겠습니다. Timer 및 TimerTask를 사용하고 있지만이 작업을 수행하려고하면 응용 프로그램이 항상 강제로 닫힙니다. 이것은 코드입니다 :일정 시간이 지난 후 ToggleButton을 선택 취소하십시오.

public class Vjezba5Activity extends Activity { 

TimerTask TimerTask11; 
Timer timer1 = new Timer(); 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    final ToggleButton TB1 = (ToggleButton) findViewById(R.id.toggleButton1); 
    TB1.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      if (TB1.isChecked()){ 
       TimerTask11 = new TimerTask() { 
         public void run() { 
          TB1.setChecked(false); 
         } 
        }; 
        timer1.schedule(TimerTask11, 1000); 
      } 
      else { 
       Toast.makeText(Vjezba5Activity.this, "Uncheck", Toast.LENGTH_SHORT).show(); 
      } 

     } 
    }); 
} 
+0

나는 핸들러를 사용합니다. 그런 다음 버튼을 선택 취소하는 것과 관련된 작업을 게시하십시오. – AJcodez

답변

1

UI는 메인 스레드에서만 업데이트 할 수 있습니다.

핸들러를 사용해보십시오.

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    final ToggleButton TB1 = (ToggleButton) findViewById(R.id.toggleButton1); 
    Handler handler = new Handler(); 
    TB1.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      if (TB1.isChecked()){ 
       handler.postDelayed(new Runnable() { 

        public void run() { 
         TB1.setChecked(false); 
        } 
       }, 1000); 
      } 
      else { 
       Toast.makeText(Vjezba5Activity.this, "Uncheck", Toast.LENGTH_SHORT).show(); 
      } 

     } 
    }); 
} 
+0

ToggleButton을 선택 취소하면 취소 할 수 있습니까? – user1177122

+0

나는 당신이 handler.removeCallbacks (Runnable r)을 사용할 수 있다고 생각한다. on 절 메서드의 첫 번째 줄에 로컬 변수로 Runnable을 만들어서 else 절에서 참조 할 수 있도록해야합니다. – user1173706

관련 문제