在此处可完全不用Handler,只是了解用法,Handler是为了解决android的多线程问题--Android平台下不允许新启动的线程访问该Activity里面的组件,这样会导致新启动的线程无法动态改变界面组件中的属性值,这就需要Handler的消息传递机制来解决了。
--》1.在新启动的线程中发送消息。(当然啦,这里并非新启动的线程)
Message msg = new Message(); msg.what = DATE_ID; myHandler.sendMessage(msg);
-->2.在主线程中获取、处理消息。
private static int DATE_ID = 0; private static int TIME_ID = 1; Handler myHandler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch(msg.what){ case 0: setCurrentDate(year, month, day); break; case 1: setCurrentTime(hour, minute); break; } } };
小实例的代码如下:
public class MainActivity extends Activity implements OnClickListener{ private EditText showDate, showTime; private Button pickDate, pickTime; private int year, month, day, hour, minute; private static int DATE_ID = 0; private static int TIME_ID = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); showDate = (EditText)findViewById(R.id.showdate); showTime = (EditText)findViewById(R.id.showtime); pickDate = (Button)findViewById(R.id.pickdate); pickTime = (Button)findViewById(R.id.picktime); pickDate.setOnClickListener(this); pickTime.setOnClickListener(this); Calendar c = Calendar.getInstance(); year = c.get(Calendar.YEAR); month = c.get(Calendar.MONTH); day = c.get(Calendar.DAY_OF_MONTH); hour = c.get(Calendar.HOUR_OF_DAY); minute = c.get(Calendar.MINUTE); setCurrentDate(year, month, day); setCurrentTime(hour, minute); } public void setCurrentDate(int year, int month, int day){ showDate.setText(year + "-" + (month+1) + "-" + day); } public void setCurrentTime(int hour, int minute){ showTime.setText(hour + ":" + minute); } @Override public void onClick(View v) { Calendar c = Calendar.getInstance(); switch(v.getId()){ case R.id.pickdate: year = c.get(Calendar.YEAR); month = c.get(Calendar.MONTH); day = c.get(Calendar.DAY_OF_MONTH); new DatePickerDialog( MainActivity.this, new OnDateSetListener() { // DatePickerDialog5个参数.1:上下文,2:设置日期的回调. //可以在里面调用更新ui的方法更新ui,3:45就是初始化时候的年月日了. @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { MainActivity.this.year = year; MainActivity.this.month = monthOfYear; MainActivity.this.day = dayOfMonth; Message msg = new Message(); msg.what = DATE_ID; myHandler.sendMessage(msg); } }, year, month, day).show(); break; case R.id.picktime: hour = c.get(Calendar.HOUR_OF_DAY); minute = c.get(Calendar.MINUTE); new TimePickerDialog( MainActivity.this, new OnTimeSetListener() { @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { MainActivity.this.hour = hourOfDay; MainActivity.this.minute = minute; Message msg = new Message(); msg.what = TIME_ID; myHandler.sendMessage(msg); } }, hour, minute, true).show(); break; } } Handler myHandler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch(msg.what){ case 0: setCurrentDate(year, month, day); break; case 1: setCurrentTime(hour, minute); break; } } }; }
布局文件:
<?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"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:text="欢迎关注Aaron.Ou Blog" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:text="日期和时间控件的使用DEMO" /> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content"> <EditText android:id="@+id/showdate" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1"/> <Button android:id="@+id/pickdate" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="选择日期"/> </LinearLayout> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content"> <EditText android:id="@+id/showtime" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1"/> <Button android:id="@+id/picktime" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="选择时间"/> </LinearLayout> </LinearLayout>
相关推荐
在Android开发中,工具类(Util Classes)是程序员们经常使用的辅助代码集合,它们封装了常见的功能,使得代码更加简洁、可读性更强。这里提到的"android工具类 26个实用工具类"是一个集合,包含了多个针对Android...
在Android系统中,日期和时间通常是通过`java.util.Date`类或`java.time`包下的类(如`LocalDateTime`)来处理的。在API 26及以上版本,推荐使用`java.time`包,因为它提供了更丰富的功能和更好的性能。 1. 获取...
在Android平台上,开发一款能显示当前日期的应用是一个基础但实用的...这个源码实例是学习Android日期处理和UI交互的好材料。通过对这些知识点的理解,开发者可以创建更复杂的日历应用或者其他需要实时显示日期的项目。
- 使用AsyncTask或Handler进行后台任务执行,防止主线程阻塞。 - RxJava/RxAndroid的集成,提供更灵活的异步编程模型。 这个"Android 通用 帮助类"项目很可能是开发者们共同智慧的结晶,通过集成了上述多种功能,...
在Android应用开发中,工具类(Utils)是程序员经常使用的辅助类库,它们包含了各种实用方法,可以帮助开发者高效地处理日常编程任务。本篇将详细阐述`Android常用工具类Utils`的相关知识点,涵盖系统操作、图像处理...
在Android开发过程中,工具类是不可或缺的一部分,它们可以极大地提高开发效率,简化代码,使得开发者能够更加专注于核心功能的实现。以下是一些Android开发中常用的工具类及其详细知识点: 1. **日志工具类**: -...
在Android开发过程中,工具类(Utility Classes)是开发者经常使用的代码模块,它们包含了各种实用功能,可以帮助我们简化常见的编程任务。"Android 工具类android-common"是一个专门为Android平台设计的集合,它...
`Date`类可以表示和格式化日期时间,但其API设计较旧,现在更推荐使用`java.time`包中的`LocalDateTime`、`Instant`等类。工具类如`TimeUtils`可以包含诸如获取当前时间、格式化日期、计算时间差等方法。 5. **文件...
在Android开发中,工具类(Utility Class)是程序员经常使用的一种设计模式,它包含了一系列静态方法,用于执行特定的任务或提供通用功能。这些类通常不持有任何实例变量,因为它们只提供服务,而不是维持状态。以下...
该压缩包文件“Android高级应用源码-Android日期时间倒计时(可设置提醒).rar”显然包含了一个Android应用程序的源代码,该程序实现了日期时间倒计时功能,并允许用户设置提醒。这个功能在很多实用的应用场景中都...
本项目提供的"Android日期时间倒计时(可设置提醒)"是一个示例代码,可以帮助开发者理解如何在Android环境中实现这一功能。 首先,我们来探讨日期时间倒计时的实现。在Android中,我们可以使用`java.util.Date`、`...
2. **日期时间工具类**:Android系统提供了`java.util.Date`和`java.text.SimpleDateFormat`等类来处理日期和时间,但自定义的工具类通常会封装更便于使用的API,比如获取当前时间戳,格式化日期,比较日期等。...
在Android开发中,日期选择器(DatePicker)、时间选择器(TimePicker)、计时器(CountDownTimer)和进度条(ProgressBar)是常见的UI组件,它们为用户提供了一种交互式的界面来选择日期、时间、显示倒计时或表示...
这个项目“安卓开发-Android日期时间倒计时(可设置提醒)”显然涉及到如何在Android平台上实现这样的功能,并且能够设置提醒通知用户。下面将详细解释这一技术实现。 1. **倒计时逻辑**: - 倒计时的基本逻辑是...
10. **线程和异步处理工具类**:如AsyncTask、Handler、Runnable、Thread或使用现代的RxJava、Coroutines等库来实现异步操作。 11. **权限检查与请求工具类**:在Android系统中,针对不同的API级别,工具类可以处理...
这个"Android日期时间倒计时(可设置提醒)"项目可能是为了实现这样的功能。在这个项目中,开发者可能涉及到以下几个核心知识点: 1. **日期与时间处理**: - 使用`java.util.Date`或`java.time`包下的类(如`...