开发者

Simple reminder for Android

I'm trying to make a simple timer.

package com.anta40.reminder;

import java.util.Timer;
import java.util.TimerTask;

import android.app.Activity;
import android.os.Bundle;
import android.widget.RadioGroup;
import android.widget.TabHost;
import android.widget.TextView;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.TabHost.TabSpec;

public class Reminder extends Activity{

    public final int TIMER_DELAY = 1000;
    public final int TIMER_ONE_MINUTE = 60000; 
开发者_如何学Go    public final int TIMER_ONE_SECOND = 1000;
    Timer timer;
    TimerTask task;
    TextView tv;

    @Override
    public void onCreate(Bundle icicle) {

        super.onCreate(icicle);
        setContentView(R.layout.main);
        timer = new Timer();

        task = new TimerTask() {

            @Override
            public void run() {
                tv = (TextView) findViewById(R.id.textview1);
                tv.setText("BOOM!!!!");
                tv.setVisibility(TextView.VISIBLE);
                try {
                    this.wait(TIMER_DELAY);
                }
                catch (InterruptedException e){

                }
                tv.setVisibility(TextView.INVISIBLE);
            }

        };

        TabHost tabs=(TabHost)findViewById(R.id.tabhost);

        tabs.setup();

        TabSpec spec = tabs.newTabSpec("tag1");

        spec.setContent(R.id.tab1);
        spec.setIndicator("Clock");
        tabs.addTab(spec);

        spec=tabs.newTabSpec("tag2");
        spec.setContent(R.id.tab2);
        spec.setIndicator("Settings");
        tabs.addTab(spec);

        tabs.setCurrentTab(0);

        RadioGroup rgroup = (RadioGroup) findViewById(R.id.rgroup);
        rgroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                if (checkedId == R.id.om){
                    timer.schedule(task, TIMER_DELAY, 3*TIMER_ONE_SECOND);
                }
                else if (checkedId == R.id.twm){
                    timer.schedule(task, TIMER_DELAY, 6*TIMER_ONE_SECOND);
                }
                else if (checkedId == R.id.thm){
                    timer.schedule(task, TIMER_DELAY, 9*TIMER_ONE_SECOND);
                }
            }
        });

    }
}

Each time I click a radio button, the timer should start, right? But why it doesn't start?


First, you cannot modify the UI from a background thread. So you cannot modify the UI from a TimerTask.

Second, even if your "BOOM!" logic were on the main application thread, you are not allowing Android to do anything. Android's UI is message- and event-driven. When you call setText() and setVisibility(), they do not take effect until you return control to Android. Hence, in your case, you would not see anything, since the TextView would become invisible immediately after becoming visible.

Third, if you do move your code to the main application thread, do not block that thread, such as with your wait() call.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜