一段时间后,TextClock会自动刷新

时间:2017-12-01 19:48:23

标签: android

我是Android开发的新手,我有这个奇怪的问题。我正在使用Android Studio进行编程。

我有这个活动,当用户点击 alarmTime TextClock时显示TimePickerDialog,当他设置所需的时间时,它将显示在同一个TextClock中。问题是几秒钟后,TextClock忘记了'时间已设置并显示当前时间。

N.B。 TextClock默认显示当前时间(初始化时)。

XML代码

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.zboot.zalarm.NewAlarmActivity">

    <TextClock
        android:id="@+id/alarmTime"
        android:layout_width="wrap_content"
        android:layout_height="32dp"
        android:layout_marginTop="300dp"
        android:autoText="false"
        android:clickable="true"
        android:focusable="true"
        android:textSize="30sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>

Java代码

import android.app.TimePickerDialog;
import android.os.Bundle;
import android.support.constraint.ConstraintLayout;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.Spinner;
import android.widget.TextClock;
import android.widget.TimePicker;

import java.text.DateFormat;

public class NewAlarmActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_new_alarm);
        this.setTitle("New Alarm");

        final boolean is24HourFormat = android.text.format.DateFormat.is24HourFormat(this);

        final TextClock alarmTime = (TextClock) findViewById(R.id.alarmTime);
        final DateFormat timeFormat = DateFormat.getTimeInstance();
        alarmTime.setText(timeFormat.format(System.currentTimeMillis()));

        final TimePickerDialog timePickerDialog = new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {
            @Override
            public void onTimeSet(TimePicker timePicker, int h, int m) {
                String hour = "" + (is24HourFormat ? h : ((h == 0 || h== 12) ? 12 : h%12));
                String min = m>9 ? "" + m : "0" + m;
                String ap = is24HourFormat ? "" : (h<12 ? "AM" : "PM");
                alarmTime.setText(hour + ":" + min + " " + ap);
            }
        }, 12,0,is24HourFormat);

        alarmTime.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                timePickerDialog.show();
            }
        });
    }
}

我做错了吗?请帮忙。

1 个答案:

答案 0 :(得分:1)

TextClock对我来说是新手,所以我不确定它的作用。我快速浏览了source,看起来TextClock会生成一个不断更新文本到当前时间的线程。你所能做的就是改变它的格式,但正如它的名字所暗示的那样,它真的是一个时钟。来自文档:

  

TextClock可以将当前日期和/或时间显示为格式化   字符串。

所以我认为你应该停止使用TextClock,而只是使用TextView。

编辑:如果你喜欢TextClock的东西,你可能只想复制源代码(参见上面的链接),制作你自己的TextClock(AlarmClock?)并只删除不断更新当前的Runnable时间。