Таймер Android Остановка и запуск - PullRequest
0 голосов
/ 03 мая 2011

Я хочу отобразить время с момента начала действия над просмотром данных карты.

Вот код таймера, который я использую. Я бы хотел, чтобы таймер остановился через 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 голосов
/ 03 мая 2011

Этот код выглядит так, как будто он подсчитывает время, в течение которого выполнялась ваша деятельность, и отображает это количество.

Если вы хотите, чтобы действие прекратилось, вам следует прекратить вызывать mHandler.postDelayed(mUpdateTime, 1000); в вашем методе updateTimeView, когда быусловие, которое вы хотите, выполнено.Предложение 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);
}
0 голосов
/ 03 мая 2011
...
timeView.setText(String.format(mTimeFormat, hour, min, sec));
if( min < 5 )
    mHandler.postDelayed(mUpdateTime, 1000);

...