我是Android开发的新手,我有这个奇怪的问题。我正在使用Android Studio进行编程。
我有此活动,当用户单击警报时间 textclock时,显示了一个timepickerdialog,当他设置所需时间时,它将显示在同一文本中。问题是在几秒钟后,文本克罗克"忘记"设置了时间并显示当前时间。
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();
}
});
}
}
我做错了什么吗?请帮助。
textclock对我来说是新的,所以我不确定它的作用。我快速查看了源头,看来TextClock催生了一个线程,该线程将文本不断更新到当前时间。您所能做的就是更改格式,但这确实是,正如它的名称所暗示的那样,时钟。从文档中:
textClock可以显示当前日期和/或时间为格式 字符串。
所以我认为您应该停止使用TextClock,而只是使用TextView。
编辑:如果您喜欢文本链接,则可能只想复制源代码(请参阅上面的链接),制作自己的textClock(AlarmClock?),然后删除可运行的可运行时间来不断更新当前时间。