Android用DatePickerDialog如何让TextView显示日期并默认选中当天日期

本文介绍了如何在Android应用中使用DatePickerDialog实现TextView点击后显示日期选择,并默认选中当天日期。通过DatePickerDialog的OnDateSetListener监听器,可以在用户确认日期后立即触发数据请求。当月份小于10时,代码会自动在前面加上0。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前几天公司的一个需求是选择日期并默认选中当天日期。当时想的是默认选中当天日期那肯定是点击TextView再选择日历咯。于是乎,在网上搜了一下。下面放一下效果图在这里选择插入图片描述

选中日期的话我们可以用DatePickerDialog和DatePicker。下面我就用DatePickerDialog为例。

下面放代码~~~~

XML

 <LinearLayout
            android:id="@+id/down_choose_date"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <TextView
                android:id="@+id/down_tv_choose_date"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="15dp"
                android:layout_marginTop="@dimen/dp_15"

                android:text="2019/12/28"
                android:textColor="@color/white" />

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/dp_16"
                android:layout_marginLeft="5dp"
                android:background="@mipmap/dao_three" />

        </LinearLayout>

JAVA

//设置成员变量
private int mYear;
private int mMonth;
private int mDay;


//点击控件显示控件样式
new DatePickerDialog(getContext(),
                new DatePickerDialog.OnDateSetListener() {
                    @Override
                    public void onDateSet(DatePicker view, int year,
                                          int month, int day) {
                        // TODO Auto-generated method stub
                        mYear = year;
                        mMonth = month;
                        mDay = day;
                        // 更新EditText控件日期 小于10加0
                        tvChooseDate.setText(new StringBuilder()
                                .append(mYear)
                                .append("/")
                                .append((mMonth + 1) < 10 ? "0"
                                        + (mMonth + 1) : (mMonth + 1))
                                .append("/")
                                .append((mDay < 10) ? "0" + mDay : mDay));
                    }
                }, calendar.get(Calendar.YEAR), calendar
                .get(Calendar.MONTH), calendar
                .get(Calendar.DAY_OF_MONTH)).show();
//设置默认选中当天日期


 //获取系统时间
     Calendar  calendar = Calendar.getInstance();
        //获取当前日期
        int year = calendar.get(Calendar.YEAR);

        int month = calendar.get(Calendar.MONTH) + 1;//特殊的是Calendar中月份从0开始计数,所以加1得到常规月份

        int day = calendar.get(Calendar.DAY_OF_MONTH);
        //将计算出来的年月日放到textview控件上
        tvChooseDate.setText(year + "/" + month + "/" + day);

那么问题又来了,选好日期之后如果想让它请求数据的话要怎么办呢?
我一开始在写这个的时候遇到了一个bug,就是我如果选择以前的日期让他显示当天的数据的话,只有点击两次这个控件他才能请求数据。后来查了DatePickerDialog 中有一个方法,就是OnDateSetListener(),选好日期之后,点击“确定”触发的事件。在这个方法里作数据的请求就可以了。
再贴一次第一次贴的代码

new DatePickerDialog(getContext(),
                new DatePickerDialog.OnDateSetListener() {
                    @Override
                    public void onDateSet(DatePicker view, int year,
                                          int month, int day) {
                        // TODO Auto-generated method stub
                        mYear = year;
                        mMonth = month;
                        mDay = day;
                        // 更新EditText控件日期 小于10加0
                        tvChooseDate.setText(new StringBuilder()
                                .append(mYear)
                                .append("/")
                                .append((mMonth + 1) < 10 ? "0"
                                        + (mMonth + 1) : (mMonth + 1))
                                .append("/")
                                .append((mDay < 10) ? "0" + mDay : mDay));
                                //数据请求
                    }
                }, calendar.get(Calendar.YEAR), calendar
                .get(Calendar.MONTH), calendar
                .get(Calendar.DAY_OF_MONTH)).show();

如果我想要默认选中的当天日期(月份)小于10的时候前面加0,应该这么写

if (month < 10) { /*月份小于10  就在前面加个0*/
          String  defaultMonth = new String(new String(String.valueOf(0)) + new String(String.valueOf(month)));

        }
        if (day < 10) { /*日期小于10  就在前面加个0*/
           String  defaultDay = new String(new String(String.valueOf(0)) + new String(String.valueOf(day)));
        }
        L.d("defaultMonth---" + defaultMonth + "---defaultDay----" + defaultDay);
        tvChooseDate.setText(year + "/" + defaultMonth + "/" + defaultDay);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值