Android Kotlin日历:实现双击日期跳转至新Activity
日历组件双击日期跳转Activity实现方案
系统自带CalendarView实现方式
- 系统CalendarView无默认双击监听器,需通过时间差判定双击:
- 定义变量记录上次点击时间:
private var lastClickTime = 0L - 给CalendarView设置日期选择监听,在回调中处理双击逻辑:
calendarView.setOnDateChangeListener { _, year, month, dayOfMonth -> val currentTime = System.currentTimeMillis() // 500ms内连续点击判定为双击,可按需调整阈值 if (currentTime - lastClickTime < 500) { // 跳转目标Activity val intent = Intent(this, TargetActivity::class.java) // 可选:传递选中日期参数 intent.putExtra("selected_date", "${year}-${month + 1}-${dayOfMonth}") startActivity(intent) } lastClickTime = currentTime }
- 定义变量记录上次点击时间:
第三方日历库通用实现(以Material Calendar View为例)
多数第三方日历库需通过时间差判断双击,以Material Calendar View为例:
private var lastClickTime = 0L materialCalendarView.setOnDateChangedListener { _, date, isSelected -> if (isSelected) { val currentTime = System.currentTimeMillis() if (currentTime - lastClickTime < 500) { val intent = Intent(this, TargetActivity::class.java) intent.putExtra("selected_date", date.toString()) startActivity(intent) } lastClickTime = currentTime } }
注:部分第三方库提供原生双击监听器,可优先查阅对应库官方文档
自定义日历组件实现方式
若为自行开发的日历(如RecyclerView实现的日期列表),在Item点击事件中处理双击:
inner class DateViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { private var itemLastClickTime = 0L fun bind(dateStr: String) { itemView.setOnClickListener { val currentTime = System.currentTimeMillis() if (currentTime - itemLastClickTime < 500) { val intent = Intent(itemView.context, TargetActivity::class.java) intent.putExtra("selected_date", dateStr) itemView.context.startActivity(intent) } itemLastClickTime = currentTime } } }
内容的提问来源于stack exchange,提问作者saFp33
相关产品推荐
相关产品推荐

