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

関連する問題