【问题标题】:Android:Cannot set current date each time to date pickerAndroid:无法设置当前日期每次日期选择器
【发布时间】:2016-02-12 11:29:50
【问题描述】:

我正在使用DatePicker 在我的应用程序中向用户显示日期。 但是,我使用 onCreateDialog 方法向用户显示日期选择器,设置整数变量如下: 静态最终 int DATE_DIALOG_ID = 999; 然后我调用下面的方法 showDialog(DATE_DIALOG_ID);

日期选择器第一次用当前日期初始化。到目前为止一切都很好。

@Override
    protected Dialog onCreateDialog(int id) {
        Calendar c = Calendar.getInstance();
        final int myear = c.get(Calendar.YEAR);
        final int mmonth = c.get(Calendar.MONTH);
        final int mday = c.get(Calendar.DAY_OF_MONTH);
        Log.d("Executed", "hihihihihihihi");
        switch (id) {
            case DATE_DIALOG_ID:
                // set date picker as current date
                DatePickerDialog _date = new DatePickerDialog(this, AlertDialog.THEME_HOLO_LIGHT, datePickerListener, myear, mmonth,
                        mday) {



                    @Override
                    public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                        if (year < myear)
                            view.updateDate(myear, mmonth, mday);

                        if (monthOfYear < mmonth && year == myear)
                            view.updateDate(myear, mmonth, mday);

                        if (dayOfMonth < mday && year == myear && monthOfYear == mmonth)
                            view.updateDate(myear, mmonth, mday);

                    }

                };
                return _date;

        }
        return null;
    }

但问题是当我选择当前日期以外的日期时,它可以工作。但是当我再次尝试选择日期时,默认情况下日期选择器会显示我上次选择的日期。每次打开日期选择器时,我都无法设置当前日期那我该怎么做呢

【问题讨论】:

    标签: android date datepicker android-simon-datepicker


    【解决方案1】:

    尝试使用来自here 的日期选择器。

    在您的活动中添加以下方法和类:

    public void showDatePickerDialog() {
        DialogFragment newFragment = new DatePickerFragment();
        newFragment.show(getSupportFragmentManager(), "datePicker");
    }
    
    public static class DatePickerFragment extends DialogFragment
                                implements DatePickerDialog.OnDateSetListener {
    
        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
            // Use the current date as the default date in the picker
            final Calendar c = Calendar.getInstance();
            int year = c.get(Calendar.YEAR);
            int month = c.get(Calendar.MONTH);
            int day = c.get(Calendar.DAY_OF_MONTH);
    
            // Create a new instance of DatePickerDialog and return it
            return new DatePickerDialog(getActivity(), this, year, month, day);
        }
    
        public void onDateSet(DatePicker view, int year, int month, int day) {
            // Do something with the date chosen by the user
        }
    }
    

    【讨论】:

    • 但它在我的活动中
    • Chintan soni 给 newFragment.show(getSupportFragmentManager(), "datePicker") 行提供错误;无法解析方法 getSupportFragmentManager()
    • @Dhiraj 确保您在活动中而不是在片段中编写代码。
    • 尝试您的解决方案会让您了解我尝试将您的解决方案放入我的主应用程序的进度
    • 哦,对不起,由于周末我无法告诉你它的工作状态兄弟......!!!!!!!!!!
    【解决方案2】:
    private Calendar c; 
    
    @Override
    onCreate(){
    
    c = Calendar.getInstance();
    
    }
    
    
    
    @Override
        protected Dialog onCreateDialog(int id) {
    
            final int myear = c.get(Calendar.YEAR);
            final int mmonth = c.get(Calendar.MONTH);
            final int mday = c.get(Calendar.DAY_OF_MONTH);
            Log.d("Executed", "hihihihihihihi");
            switch (id) {
                case DATE_DIALOG_ID:
                    // set date picker as current date
                    DatePickerDialog _date = new DatePickerDialog(this, AlertDialog.THEME_HOLO_LIGHT, datePickerListener, myear, mmonth,
                            mday) {
    
    
    
    
                        @Override
                        public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
    
                             /// Here you can set your updated date to calendar instance. So whenever you open it again, it will display last updated date
                             c.set(year, (monthOfYear- 1), dayOfMonth);
    
                            if (year < myear)
                                view.updateDate(myear, mmonth, mday);
    
                            if (monthOfYear < mmonth && year == myear)
                                view.updateDate(myear, mmonth, mday);
    
                            if (dayOfMonth < mday && year == myear && monthOfYear == mmonth)
                                view.updateDate(myear, mmonth, mday);
    
                        }
    
                    };
                    return _date;
    
            }
            return null;
        }
    

    希望对你有帮助!

    【讨论】:

    • 您检查过更新的答案吗?几分钟前我更新了我的答案。请仔细检查一下,让我知道它是否有效!
    • 当我选择日期时,它作为文本立即分配给按钮,当我尝试更改日期时,它不显示当前日期它显示我以前选择的日期
    【解决方案3】:

    (英语不是我的母语,如有需要请指正)

    我认为你的条件检查是错误的,

    if (year < myear)
       view.updateDate(myear, mmonth, mday);
    
    if (monthOfYear < mmonth && year == myear)
        view.updateDate(myear, mmonth, mday);
    
    if (dayOfMonth < mday && year == myear && monthOfYear == mmonth)
        view.updateDate(myear, mmonth, mday);
    

    例如:默认情况下,您将当前日期设置为今天(2016 年 13 月 2 日)。

    第 1 步:

    在 datePicker 中,默认日期是 13/2/2016。现在您选择前一天(2016 年 12 月 2 日)

    现在 datepicker 值变为 12/2/2016。

    在这种情况下,

    如果(年份

    if (monthOfYear

    if (dayOfMonth

    第 2 步

    现在您再次将日期选择器日期更改为今天的日期 (13/2/2016)

    在这种情况下:

    如果(年份

    if (monthOfYear

    if (dayOfMonth - 这种情况变为假,因为 dayOfMonth 和 mday 相同。但您正在检查更早的日期。

    【讨论】:

      猜你喜欢
      • 2021-11-05
      • 2014-12-07
      • 2016-04-29
      • 2011-04-09
      • 2012-11-20
      • 2016-02-29
      • 1970-01-01
      • 1970-01-01
      • 2020-06-08
      相关资源
      最近更新 更多