当前位置: 首页 > news >正文

【Android】日期选择器

在这里插入图片描述

三三要成为安卓糕手
这一章节主要想让我学会的是,利用接口实现联调,这是一种非常棒的编程思想,好好体会

零:需求引入

点击去修改按钮,弹出日历对话框,选择某个日期,点击确定,修改后的数据展示在原先的视图上

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

先上代码

public class PickerBrithdayDialog extends DialogFragment{private BrithdayDialogListener listener;@NonNull@Overridepublic Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {Calendar calendar = Calendar.getInstance();//单例模式int year = calendar.get(Calendar.YEAR);int month = calendar.get(Calendar.MONTH);int day = calendar.get(Calendar.DAY_OF_MONTH);DatePickerDialog datePickerDialog=new DatePickerDialog(getActivity(), new DatePickerDialog.OnDateSetListener() {@Overridepublic void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {//选择完点击确定后,当前方法会被触发listener.onResult(year,month+1,dayOfMonth);}},year,month,day);return datePickerDialog;}public void setBirthdayDialogListener(BrithdayDialogListener listener){this.listener = listener;}public interface BrithdayDialogListener{void onResult(int year , int month , int day);}
}
public class ModifyBrithdayActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_modify_brithday);TextView tvDate = findViewById(R.id.tv_date);PickerBrithdayDialog dialog= new PickerBrithdayDialog();//不要放在onClick中创建,节约资源findViewById(R.id.btn_modify).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {dialog.show(getSupportFragmentManager(),"btn_modify");}});PickerBrithdayDialog.BrithdayDialogListener dialogListener =new PickerBrithdayDialog.BrithdayDialogListener(){@Overridepublic void onResult(int year, int month, int day) {tvDate.setText(year + "年" + month + "月" + day +"日");}};dialog.setBirthdayDialogListener(dialogListener);}
}
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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:id="@+id/main"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".dialog.ModifyBrithdayActivity"><TextViewandroid:id="@+id/tv_label"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="你的生日是"android:textSize="28sp"android:textStyle="bold"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent"app:layout_constraintVertical_bias="0.3" /><TextViewandroid:id="@+id/tv_date"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="2025.07.09"android:textSize="28sp"android:textStyle="bold"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toBottomOf="@id/tv_label" /><Buttonandroid:id="@+id/btn_modify"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="12dp"android:text="去修改"android:textSize="20sp"android:textStyle="bold"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toBottomOf="@id/tv_date" /></androidx.constraintlayout.widget.ConstraintLayout>

一:日期选择器

1:DatePickerDialog用法

(1)参数

Android 中,Picker 翻译为 “选择器” 。具体到 DatePickerDialog 里,它指的是用于选择日期的界面组件,所以更准确的表述是 “日期选择器对话框”

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(2)源码

源码参数,默认显示的年月日是什么

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • @NonNull 注解表示方法返回值不能为 null
  • @Nullable 注解表示方法返回值可能为 null

五个参数

  • Context上下文
  • OnDateSetListen 日期设置监听器
  • 年月日

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2:Calendar

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(1)getInstance

单例模式,本质其实也是new 一个对象

Calendar.YEAR

Calendar.MONTH

Calendar.DAY_OF_MONTH

这三个参数确实是默认值,但它们不是写死的固定值,而是动态获取的当前系统日期

当然也可以手动设定默认的年月日,直接在构造方法中给具体的数字

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

注意这里创建DatePickerDialog是在

3:日期页面跳转

每次点击都要创建一个对象,浪费资源,写到外面;

点击事件中的代码上一篇文章中有介绍过,不必多说

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

注意xml代码中控件的id

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

效果如下——页面正常跳转

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在这三块代码的执行逻辑就非常清楚了

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

二:日期修改与视图联动

提出问题:DialogFragment与Activity如何做数据交互

我的数据是出现在这里

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

怎么把数据传到ModifyBrithdayActivity中的视图中并子啊view中去显示呢??

假如这里我选择7月1日,点击确定。选择好的数据怎么传过去呢?我咧哇666

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1:联调流程图

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(1)时序图

  1. ModifyBrithdayActivity 创建 PickerBrithdayDialog 实例
  2. ModifyBrithdayActivity 设置监听器(实现 onResult() 方法)
  3. 用户点击按钮,对话框显示
  4. 用户选择日期并确认
  5. 对话框触发 onDateSet()
  6. 对话框调用 listener.onResult()
  7. ModifyBrithdayActivity 的 onResult() 被执行,更新 UI

简单总结就是:
绿色线完成监听器注册(告诉对话框结果该传给谁) ,蓝色方框里调用 listener.onResult 时,借助注册好的关联,就能触发紫色箭头对应的、Activity 里的回调方法,实现 “用户点击按钮 → 显示日期选择对话框 → 用户选择日期并确认 →对话框通过接口回调通知活动 → 活动更新 UI 显示日期” 的完整流程

(2)写代码的顺序

写代码的顺序,其实都是一环扣着一环的

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(3)提取成员变量

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2:成员接口

两件事

在类内部可以定义接口,称为成员接口(Member Interface)。它的访问权限由 publicprivateprotected 或default(默认)控制

接口中的方法默认是抽象方法public abstract),必须被实现类重写才能使用

如果接口是 public 的,可以直接通过类名访问接口

3:月份+1

问题引入:选择的月份跟显示出来的不一样我也是醉了

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

打断点,走流程,无敌了兄弟(打断点、走流程是必须掌握的技能)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

month默认是从0开始的,需要+1

http://www.dtcms.com/a/305187.html

相关文章:

  • 镁金属接骨螺钉注册检测:骨科植入安全的科学基石
  • 【面试】软件测试面试题
  • ICT模拟零件测试方法--电阻测试
  • 集成电路学习:什么是WDT看门狗定时器
  • Java中的异常判断以及文件中的常用方法及功能
  • UCLAMP0501P.TCT SEMTECH:超低电容TVS二极管 0.25pF+20kV防护!
  • Python与Spark
  • 26考研11408数据结构
  • yolo11安卓端部署检测图片
  • Docker用Web应用实例深入容器
  • Docker初学者需要了解的几个知识点(三):Docker引擎与Docker Desktop
  • prometheus_client 调用统计
  • 2025年中科院与JCR期刊分区深度对比(第一期):TON中科院分区3区不变,JCR分区升至Q1;TOSEM重回中科院1区!
  • Wan2.1
  • openEuler性能测试常用工具-fio开源压力测试工具
  • 05动手学深度学习(下)
  • EnergyMath芯详科技 EMS4100/MES4000/MES3900
  • sqlite3---维护命令、回调函数
  • 用命令查看Android设备的 Linux 内核版本,了解其对应的硬件支持各种特性
  • gRPC性能陷阱:低延迟网络下的客户端瓶颈揭秘
  • k8s搭建nfs共享存储
  • 前端代码打包与压缩完全指南
  • div 封装日历
  • 使用echarts绘制立体柱状图
  • Export useForm doesn‘t exist in target module
  • 深度解读|美创科技参编国家标准《数字水印技术实现指南》
  • docker的安装和配置流程
  • Python在人工智能与科学计算领域的统治地位:语言、生态与未来
  • 云原生MySQL Operator开发实战(四):测试策略与生产部署
  • Qt 移动应用推送通知实现