2012-01-30 90 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