Uncheck ToggleButton after some period of time

2019-08-22 14:51发布

I want my ToggleButton to be unchecked after some period of time when i check it. I am using Timer and TimerTask but my application always force close when i try to do this. This is the code:

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();
            }

        }
    });
}

1条回答
女痞
2楼-- · 2019-08-22 15:45

You can only update the UI from the main thread.

Try using a handler.

@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();
            }

        }
    });
}
查看更多
登录 后发表回答