【问题标题】:Unable to Current Data on Data picker无法在数据选择器上获取当前数据
【发布时间】:2015-12-21 21:12:49
【问题描述】:

我创建了一个自定义数据选择器,其中显示了 1950 年至 2016 年的年份。 现在,当我第一次打开选择器时,我想设置当天的当前数据。但我无法将其设置为当前数据。首次启动后,它完全按照我想要的方式工作。

这是我目前尝试过的代码

private void openDatePicker(int month, int day, int year) {
        try {

            Log.e("calender", "MONTH = " + month);
            Log.e("calender", "DAY_OF_WEEK = " + day);
            Log.e("calender", "YEAR = " + year);

            m_calendar.set(Calendar.DAY_OF_MONTH, month);
            m_calendar.set(Calendar.MONTH, day);
            m_calendar.set(Calendar.YEAR, year);

            int p_minYear, p_minMonth, p_minDay;
            int p_maxYear, p_maxMonth, p_maxDay;

            p_minDay = 1;
            p_minMonth = 0;
            p_minYear = 1950;

            p_maxDay = 31;
            p_maxMonth = 11;
            p_maxYear = 2016;

            Calendar m_maxDateCalendar = Calendar.getInstance();
            m_maxDateCalendar.set(Calendar.YEAR, p_maxYear);
            m_maxDateCalendar.set(Calendar.MONTH, p_maxMonth);
            m_maxDateCalendar.set(Calendar.DAY_OF_MONTH, p_maxDay);

            Calendar m_minDateCalendar = Calendar.getInstance();
            m_minDateCalendar.set(Calendar.YEAR, p_minYear);
            m_minDateCalendar.set(Calendar.MONTH, p_minMonth);
            m_minDateCalendar.set(Calendar.DAY_OF_MONTH, p_minDay);

            new YearPicker(m_context, m_datePickerListener, m_minDateCalendar,
                    m_maxDateCalendar, m_calendar).show();
        } catch (Throwable p_e) {
            // Have suppressed the exception
            p_e.printStackTrace();
        }
    }

这是我用于年份选择器的 calss YearPicker.Java

public class YearPicker extends DatePickerDialog {
    private int maxYear = 0;
    private int maxMonth = 0;
    private int maxDay = 0;

    private int minYear = 0;
    private int minMonth = 0;
    private int minDay = 0;
    private Calendar m_minDateCalendar, m_maxDateCalendar, m_calendar;

    private boolean m_fired = false;

    public YearPicker(Context context, OnDateSetListener callBack,
            Calendar p_minCalendar, Calendar p_maxCalendar,
            Calendar p_currentCalendar) {
        super(context, callBack, p_currentCalendar.get(Calendar.YEAR),
                p_currentCalendar.get(Calendar.MONTH), p_currentCalendar
                        .get(Calendar.DAY_OF_MONTH));

        m_minDateCalendar = (Calendar) p_minCalendar.clone();
        m_maxDateCalendar = (Calendar) p_maxCalendar.clone();
        m_calendar = (Calendar) p_currentCalendar.clone();
//      m_calendar = p_currentCalendar;

        Log.e("m_calendar", "=> " + m_calendar.get(Calendar.MONDAY));
        Log.e("m_calendar", "=> " + m_calendar.get(Calendar.DAY_OF_WEEK));
        Log.e("m_calendar", "=> " + m_calendar.get(Calendar.YEAR));

        this.minDay = m_minDateCalendar.get(Calendar.DAY_OF_MONTH);
        this.minMonth = m_minDateCalendar.get(Calendar.MONTH);
        this.minYear = m_minDateCalendar.get(Calendar.YEAR);
        this.maxDay = m_maxDateCalendar.get(Calendar.DAY_OF_MONTH);
        this.maxMonth = m_maxDateCalendar.get(Calendar.MONTH);
        this.maxYear = m_maxDateCalendar.get(Calendar.YEAR);

        try {
            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) {
                m_fired = false;
                this.getDatePicker().setMaxDate(
                        m_maxDateCalendar.getTime().getTime());
                this.getDatePicker().setMinDate(
                        m_minDateCalendar.getTime().getTime());
            } else {
                m_fired = true;
            }
        } catch (Throwable p_e) {

            Log.d("m_maxDateCalendar", ""
                    + m_maxDateCalendar.getTime().getTime());
            Log.d("m_minDateCalendar", ""
                    + m_minDateCalendar.getTime().getTime());
            Log.d("m_calendar", "" + m_calendar.getTime().getTime());
            p_e.printStackTrace();
        }
    }

    @Override
    public void onDateChanged(DatePicker p_view, int p_year, int p_monthOfYear,
            int p_dayOfMonth) {
        super.onDateChanged(p_view, p_year, p_monthOfYear, p_dayOfMonth);

        if (m_fired) {
            m_calendar.set(Calendar.YEAR, p_year);
            m_calendar.set(Calendar.MONTH, p_monthOfYear);
            m_calendar.set(Calendar.DAY_OF_MONTH, p_dayOfMonth);

            if (m_calendar.after(m_maxDateCalendar)) {
                m_fired = true;
                if (maxMonth > 11) {
                    maxMonth = 11;
                }
                p_view.updateDate(maxYear, maxMonth, maxDay);
            } else if (m_calendar.before(m_minDateCalendar)) {
                m_fired = true;
                if (minMonth > 11) {
                    minMonth = 11;
                }
                p_view.updateDate(minYear, minMonth, minDay);
            } else {
                m_fired = true;
                p_view.updateDate(p_year, p_monthOfYear, p_dayOfMonth);
            }
        }
    }

}

我现在想要什么

我想将当前日期设置为第一次打开选择器..

例如!如果用户想要选择日期,那么他最初将没有选择日期。但是当他点击日期部分时,他会收到一个日期选择器的提示。那时我想设置当前日期。谢谢,请帮忙。

【问题讨论】:

    标签: android android-spinner android-datepicker


    【解决方案1】:

    我想设置当前日期,因为选择器打开 第一次..

    IMO,这是因为以下几行:

    m_calendar.set(Calendar.DAY_OF_MONTH, month);
    m_calendar.set(Calendar.MONTH, day);
    m_calendar.set(Calendar.YEAR, year);
    

    应该是这样的:

    m_calendar.set(Calendar.DAY_OF_MONTH, day);
    m_calendar.set(Calendar.MONTH, month);
    m_calendar.set(Calendar.YEAR, year);
    

    或直接致电m_calendar.set(year, month, day);

    请注意在 Calendar.java 文件中:

    public static final int JANUARY = 0;
    public static final int FEBRUARY = 1;
    ...
    

    所以如果你想要FEBRUARY,你应该使用m_calendar.set(1, month, day);m_calendar.set(Calendar.FEBRUARY, month, day);。换句话说,如果您调用openDatePicker(3, 20, 2015);,DatePicker 将显示日期April 20, 2015

    希望对你有帮助!

    【讨论】:

    • 抱歉,我现在无法检查。但是为什么要改变顺序呢?即使它在第一次后显示正确。
    • 不是序列,只是正确的变量,为什么将day 设置为month,将month 设置为day
    • 天啊...我明白了,谢谢。我希望它一定会奏效。我会检查并告诉你
    • 感谢我的虚拟朋友 :)。在对代码进行更多更正后,它就可以工作了。再次感谢
    • 朋友,我还有一个问题在这里发布,请查看并帮助谢谢stackoverflow.com/q/34443855/3593066
    猜你喜欢
    • 2015-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多