我是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();
}
});
}
}
我做错了吗?请帮忙。
答案 0 :(得分:1)
TextClock对我来说是新手,所以我不确定它的作用。我快速浏览了source,看起来TextClock会生成一个不断更新文本到当前时间的线程。你所能做的就是改变它的格式,但正如它的名字所暗示的那样,它真的是一个时钟。来自文档:
TextClock可以将当前日期和/或时间显示为格式化 字符串。
所以我认为你应该停止使用TextClock,而只是使用TextView。
编辑:如果你喜欢TextClock的东西,你可能只想复制源代码(参见上面的链接),制作你自己的TextClock(AlarmClock?)并只删除不断更新当前的Runnable时间。