Android计时器停止并启动

时间:2011-05-02 22:06:37

标签: android timer relativelayout

我想在地图数据视图中显示自活动开始以来的时间。

这是我正在使用的计时器代码。我希望计时器在5分钟后停止。我需要为此代码添加什么才能使其正常工作?

package timer.tr;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handle;
import android.os.Handler;
import android.widget.TextView;

public class timer extends Activity {
    private TextView timeView;
    private int hour = 0;
    private int min = 0;
    private int sec = 0;
    String mTimeFormat = "%02d:%02d:%02d";
    final private Handler mHandler = new Handler();
    Runnable mUpdateTime = new Runnable() {
        public void run() { updateTimeView(); }
    };

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        timeView = new TextView(this);
        timeView.setText(String.format(mTimeFormat, hour, min, sec));
        setContentView(timeView);
        mHandler.postDelayed(mUpdateTime, 1000);
    }

    public void updateTimeView() {
        sec += 1;
        if(sec >= 60) {
            sec = 0;
            min += 1;
            if (min >= 60) {
                min = 0;
                hour += 1;
            }
        }
        timeView.setText(String.format(mTimeFormat, hour, min, sec));
        mHandler.postDelayed(mUpdateTime, 1000);
    }
}

这是我的布局XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<com.google.android.maps.MapView 
    android:id="@+id/mapView"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:enabled="true"
    android:clickable="true"
    android:apiKey="0cWhB29uXURimKWeF3lASx-MHSdekdEUZ1oZ-MQ"
    />
    <RelativeLayout android:layout_height="wrap_content" android:id="@+id/relativeLayout1" android:layout_width="fill_parent"></RelativeLayout>
    </LinearLayout>

目前我不再看到我的地图视图,我只看到我的TextView显示时间。

2 个答案:

答案 0 :(得分:0)

...
timeView.setText(String.format(mTimeFormat, hour, min, sec));
if( min < 5 )
    mHandler.postDelayed(mUpdateTime, 1000);

答案 1 :(得分:0)

此代码看起来像是计算您的活动运行的时间并显示此数量。

如果您希望活动停止,则应在满足所需条件时停止在updateTimeView方法中调用mHandler.postDelayed(mUpdateTime, 1000);。 ColdForged建议符合您的标准

if( min < 5 )
    mHandler.postDelayed(mUpdateTime, 1000);

要同时显示TextView和MapView,您应该使用以下XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<com.google.android.maps.MapView 
    android:id="@+id/mapView"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:enabled="true"
    android:clickable="true"
    android:apiKey="0cWhB29uXURimKWeF3lASx-MHSdekdEUZ1oZ-MQ"
    />
<TextView android:id="@+id/timeText"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="" />
</RelativeLayout>

您应该将onCreate方法修改为以下内容:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    timeView = findViewById(R.id.timeText);
    timeView.setText(String.format(mTimeFormat, hour, min, sec));
    setContentView(R.layout.your_xml_filename_here);
    mHandler.postDelayed(mUpdateTime, 1000);
}