美文网首页
Android之DatePicker的使用

Android之DatePicker的使用

作者: SeekLife0 | 来源:发表于2022-02-23 20:39 被阅读0次

    案例:
    要求,只能选择从当前时间往后的日期。


    图片.png

    1、使用
    布局

                  <com.hjq.shape.layout.ShapeRelativeLayout
                        android:id="@+id/srl_date"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        >
    
                        <com.hjq.shape.view.ShapeTextView
                            android:id="@+id/stv_date_1"
                            android:layout_width="wrap_content"
                            android:layout_height="25dp"
                            android:layout_centerVertical="true"
                            android:layout_marginTop="10dp"
                            android:gravity="center"
                            android:paddingHorizontal="20dp"
                            android:text="年/月/日"
                            app:shape_radius="15dp"
                            app:shape_solidColor="@color/houseCondition" />
    
                        <View
                            android:id="@+id/v_line"
                            android:layout_width="17dp"
                            android:layout_height="1dp"
                            android:layout_centerVertical="true"
                            android:layout_marginHorizontal="2dp"
                            android:layout_marginTop="10dp"
                            android:layout_toRightOf="@+id/stv_date_1"
                            android:background="@color/btnColor" />
    
                        <com.hjq.shape.view.ShapeTextView
                            android:id="@+id/stv_date_2"
                            android:layout_width="wrap_content"
                            android:layout_height="25dp"
                            android:layout_centerVertical="true"
                            android:layout_marginTop="10dp"
                            android:layout_toRightOf="@id/v_line"
                            android:gravity="center"
                            android:paddingHorizontal="20dp"
                            android:text="年/月/日"
                            app:shape_radius="15dp"
                            app:shape_solidColor="@color/houseCondition" />
    
                    </com.hjq.shape.layout.ShapeRelativeLayout>
    

    在activity中

    //找到布局的控件
    @BindView(R.id.stv_date_1)
    lateinit var stvDate1: ShapeTextView
    @BindView(R.id.stv_date_2)
    lateinit var stvDate2: ShapeTextView
    
    //装修 -> 入住日期(存储为Date类型是为了把该日期传回给后端,后端的接收类型为Date)
    private var renovationDate : Date? = null
    private var checkInDate : Date? = null
    
    @OnClick(R.id.stv_date_1)
        fun checkStart() {
            //获取日历的一个实例,里面包含了当前的年月日
            val calendar: Calendar = Calendar.getInstance()
            //构建一个日期对话框,该对话框已经集成了日期选择器
            //DatePickerDialog的第二个构造参数指定了日期监听器
            val dialog = DatePickerDialog(
                this, object : DatePickerDialog.OnDateSetListener {
                    override fun onDateSet(view: DatePicker?, year: Int, month: Int, dayOfMonth: Int) {
                        val desc = String.format(
                            "%d年%d月%d日",
                            year,
                            month + 1,
                            dayOfMonth
                        )
                        stvDate1.setText(desc) //选择的日期显示在textView中
                        var date = SimpleDateFormat("yyyy年MM月dd日")
                        var subDate = date.parse(desc)
                        renovationDate = subDate
                    }
                },
                calendar.get(Calendar.YEAR),
                calendar.get(Calendar.MONTH),
                calendar.get(Calendar.DAY_OF_MONTH)
            )
            var dp = dialog.datePicker
            dp.minDate = Date().time
            //把日期对话框显示在界面上
            dialog.show()
        }
    
        @OnClick(R.id.stv_date_2)
        fun checkEnd() {
            //获取日历的一个实例,里面包含了当前的年月日
            val calendar: Calendar = Calendar.getInstance()
            //构建一个日期对话框,该对话框已经集成了日期选择器
            //DatePickerDialog的第二个构造参数指定了日期监听器
            val dialog = DatePickerDialog(
                this, object : DatePickerDialog.OnDateSetListener {
                    override fun onDateSet(view: DatePicker?, year: Int, month: Int, dayOfMonth: Int) {
                        val desc = String.format(
                            "%d年%d月%d日",
                            year,
                            month + 1,
                            dayOfMonth
                        )
                        stvDate2.setText(desc) //选择的日期显示在textView中
                        var date = SimpleDateFormat("yyyy年MM月dd日")
                        var subDate = date.parse(desc)
                        checkInDate = subDate
                    }
    
                },
                calendar.get(Calendar.YEAR),
                calendar.get(Calendar.MONTH),
                calendar.get(Calendar.DAY_OF_MONTH)
            )
            var dp = dialog.datePicker
            //设置日期选择器能选择的最小日期,从当前日期开始选择。
            dp.minDate = Date().time
            //把日期对话框显示在界面上
            dialog.show()
        }
    

    2、注意事项
    回传使用rxhttp、fastJson,先把数据封装到一个json数据格式中,此时fastJson的Date类型解析不能使用默认的解析方式,应该使用与后端解析保持一致,比如这里地方"yyyy-MM-dd"。所以这里修改了fastJson的解析格式,在代码的第二行可以看到,这是一个坑。

    //量身营造提交请求
        fun requestSubmit(madeOrderParam : MadeOrderParam) {
            JSONObject.DEFFAULT_DATE_FORMAT="yyyy-MM-dd"  //设置日期格式
            val `object`: JSONObject = JSONObject()
            `object`["housePlanId"] = madeOrderParam.housePlanId
            `object`["deviseInfo"] = madeOrderParam.deviseInfo
            //rxhttp获取后台数据
            RxHttp.postJson(Constant.CUSTOM_ORDER)
                .addHeader(Constant.TOKEN, AppSharedPreferences.getInstance(me).token)
                .addAll(`object`.toJSONString())
                .asClass(Response::class.java)
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe({ a ->
                    if(a.isSuccess){
                        Log.e("量身营造设计需求提交调试", "量身营造设计需求提交是否成功:" + a.isSuccess + "状态码:" + a.status)
                        val toast = Toast.makeText(this, "设计需求提交成功", Toast.LENGTH_SHORT)
                        toast.setGravity(Gravity.CENTER, 0, 0)
                        toast.show()
                        Log.e("设计需求提交调试","housePlanId->${madeOrderParam.housePlanId}")
                        Log.e("设计需求提交调试","deviseInfo->${madeOrderParam.deviseInfo}")
                    }else{
                        Log.e("量身营造设计需求提交调试", "量身营造设计需求提交是否成功:" + a.isSuccess + "状态码:" + a.status + "msg" + a.msg)
                        val toast = Toast.makeText(this, "设计需求提交失败" , Toast.LENGTH_SHORT)
                        toast.setGravity(Gravity.CENTER, 0, 0)
                        toast.show()
                    }
                }, { throwable ->
                    Log.e("量身营造设计需求提交调试", "error:" + throwable)
                    val toast = Toast.makeText(this, "量身营造设计需求提交失败", Toast.LENGTH_SHORT)
                    toast.setGravity(Gravity.CENTER, 0, 0)
                    toast.show()
                })
        }
    

    相关文章

      网友评论

          本文标题:Android之DatePicker的使用

          本文链接:https://www.haomeiwen.com/subject/hxbukrtx.html