Android中的定时事件处理程序

时间:2013-04-30 06:09:20

标签: android

我正在努力让简单的Android应用程序正常运行。我在Java方面的经验很少,来自C,而我正试图从一个简单的时钟应用程序开始,它将每秒更新一次显示。这是我的Java代码:

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    String currentdatetime = 
            DateFormat.getDateTimeInstance().format(new Date());
    final TextView textview = new TextView(this);
    Handler handler = new Handler();
    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            String currentdatetime = 
                    DateFormat.getDateTimeInstance().format(new Date());
            textview.setText(currentdatetime);
        }
    };
    textview.setGravity(Gravity.CENTER); 
    textview.setTextSize(20);
    textview.setText(currentdatetime);
    setContentView(textview);
    handler.postDelayed(runnable, 1000);
    runnable.run();
}

我在Debian Linux中使用Google提供的ADT捆绑包运行此功能,并遵循Eclipse为修复这些问题提供的所有建议,但无济于事。该程序编译得很好并且完全按照我的预期显示,除了它根本不更新。我尽我所能地搜索谷歌,并采取了许多不同的方式,但我没有成功。

我希望这个程序要做的是,在创建时,将“currentdatetime”设置为当前日期和时间,将其粘贴到TextView中,然后将TextView更改为主视图。我希望它然后点击handler.postDelayed并且每千毫秒再次执行此操作。显然,这不是正在发生的事情。

我害怕我完全迷失了。有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:3)

好吧,看来我在错误的赛道上。我已经让代码现在正常工作,而且更加整洁,具体如下:

protected void onCreate(Bundle savedInstanceState) {
    final Handler handler = new Handler();
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final TextView textview = new TextView(this);
    Timer timer = new Timer();
    timer.scheduleAtFixedRate(new TimerTask() {
        @Override
        public void run() {
            handler.post(new Runnable() {
                public void run() {
                    String currentDateTimeString = 
                        DateFormat.getDateTimeInstance().format(new Date());
                    textview.setGravity(Gravity.CENTER);
                    textview.setTextSize(60);
                    textview.setText(currentDateTimeString);
                    setContentView(textview);
                }
            });
        }
    },1000,1000);
}

感谢任何准备回答的人。