2012-01-30 85 views
0

我希望我的切換按鈕在一段時間後取消選中,當我檢查它時。我使用Timer和TimerTask,但當我嘗試執行此操作時,我的應用程序始終強制關閉。這是代碼:在一段時間後取消選中切換按鈕

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 2012-01-30 01:15:09

回答

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

如果我選擇不在某一時刻取消選中切換按鈕,我可以取消該操作嗎? – user1177122 2012-01-30 01:37:46

+0

我想你可以使用handler.removeCallbacks(Runnable r)。您需要在onClick方法的第一行中創建Runnable作爲局部變量,以便您可以在else子句中引用它。 – user1173706 2012-01-30 03:01:40

相關問題