开发者

TextSwitcher not updating

So I have a TextSwitcher that I want to up开发者_运维问答date every second with the number of seconds it has been since the activity opened. Here is my code

public class SecondActivity extends Activity implements ViewFactory
{   
    private TextSwitcher counter;
    private Timer secondCounter;
    int elapsedTime = 0;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        // Create the layout
        super.onCreate(savedInstanceState);

        setContentView(R.layout.event);

        // Timer that keeps track of elapsed time
        counter = (TextSwitcher) findViewById(R.id.timeswitcher);
        Animation in = AnimationUtils.loadAnimation(this,
                android.R.anim.fade_in);
        Animation out = AnimationUtils.loadAnimation(this,
                android.R.anim.fade_out);
        counter.setFactory(this);
        counter.setInAnimation(in);
        counter.setOutAnimation(out);

        secondCounter = new Timer();
        secondCounter.schedule(new TimerUpdate(), 0, 1000);
    }

    /**
     * Updates the clock timer every second
     */
    public void updateClock()
    {        
        //Update time
        elapsedTime++;
        int hours = elapsedTime/360;
        int minutes = elapsedTime/60;
        int seconds = elapsedTime%60;

        // Format the string based on the number of hours, minutes and seconds
        String time = "";

        if (!hours >= 10)
        {
            time += "0";
        }
        time += hours + ":";

        if (!minutes >= 10)
        {
            time += "0";
        }
        time += minutes + ":";

        if (!seconds >= 10)
        {
            time += "0";
        }
        time += seconds;

        // Set the text to the textview
        counter.setText(time);
    }

    private class TimerUpdate extends TimerTask
    {
        @Override
        public void run()
        {
            updateClock();  
        }
    }

    @Override
    public View makeView() 
    {
        Log.d("MakeView");
        TextView t = new TextView(this);
        t.setTextSize(40);
        return t;
    }
}

So basically, I have a Timer that every second adds another second and them formats the way I want to be displayed and set the text of the TextSwitcher, which I thought called makeView, but makeView only gets called once and the time stays as 00:00:01. Did I miss a step, I dont think this UI object is very well documented.

Thanks, Jake


You can only update the UI in the UI thread. So in your example you could do something like this.

private Handler mHandler = new Handler() {
     void handleMessage(Message msg) {
          switch(msg.what) {
               CASE UPDATE_TIME:
                    // set text to whatever, value can be put in the Message
          }
     }
}

And call

mHandler.sendMessage(msg);

in the run() method of the TimerTask.

This is a solution to your current issue but there is probably a better way to do it without using TimerTasks.

0

上一篇:

下一篇:

精彩评论

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

最新问答

问答排行榜