Android 如何从DatePicker检索用户选择的日期?

Android 如何从DatePicker检索用户选择的日期?,android,datepicker,Android,Datepicker,我正在使用Android开发第二版的《大书呆子牧场指南》。到目前为止,这本书进展顺利,只是我注意到他们的代码中有一个bug,我不知道如何修复它。my CrimeFragment类中的onActivityResult方法检索用户选择的日期,并使用该日期更新mCrime,还更新按钮上的文本以显示最新日期。这只能在onActivityResult方法内部执行,但本书希望您粘贴行mDateButton.setTextmCrime.getDate.toString;在其他地方调用的单独活动中。好吧,所有这

我正在使用Android开发第二版的《大书呆子牧场指南》。到目前为止,这本书进展顺利,只是我注意到他们的代码中有一个bug,我不知道如何修复它。my CrimeFragment类中的onActivityResult方法检索用户选择的日期,并使用该日期更新mCrime,还更新按钮上的文本以显示最新日期。这只能在onActivityResult方法内部执行,但本书希望您粘贴行mDateButton.setTextmCrime.getDate.toString;在其他地方调用的单独活动中。好吧,所有这一切只需要返回原始日期,而不是用户选择的日期

这是用户从DatePicker对话框中选择日期的代码:

return new AlertDialog.Builder(getActivity())
                .setView(v)
                .setTitle(R.string.date_picker_title)
                .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        int year = mDatePicker.getYear();
                        int month = mDatePicker.getMonth();
                        int day = mDatePicker.getDayOfMonth();

                        Date date = new GregorianCalendar(year, month, day).getTime();
                        sendResult(Activity.RESULT_OK, date);
                    }
                })
                .setNegativeButton(R.string.cancel, null)
                .create();
代码发送onActivityResult获取的结果,下面是代码:

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if(resultCode != Activity.RESULT_OK){
            return;
        }
        if(requestCode == REQUEST_DATE){
            Date date = (Date) data.getSerializableExtra(DatePickerFragment.EXTRA_DATE);
            mCrime.setDate(date);
            updateDate();
            /*
            * The code mDateButton.setText(mCrime.getDate().toString()) only works here!!!
            * */
        }
    }

    private void updateDate() {
        mDateButton.setText(mCrime.getDate().toString());
    }
这行代码只在该方法中起作用,但我被告知将其放入名为updateDate的新方法中,并在必要时调用它。它不起作用。我对这个问题很失望。对于这样一本受欢迎的书来说,这似乎是一个非常幼稚的错误


谢谢。

试试下面这个用户从DatePicker选择的日期,我希望这会对你有所帮助

public void pickdate(View view){
    final Calendar c = Calendar.getInstance();
    int mYear = c.get(Calendar.YEAR);
    int mMonth = c.get(Calendar.MONTH);
    int mDay = c.get(Calendar.DAY_OF_MONTH);

    final Calendar c1 = Calendar.getInstance();
    DatePickerDialog datePickerDialog = new DatePickerDialog(MainActivity.this,new DatePickerDialog.OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker view, int year, int month, int day) {

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

            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
            datebutton.setText(dateFormat.format(c1.getTime())); //to set date on button in format yyyy-MM-dd
            String date = datebtn.getText().toString();//to get date to string from button
            //OR use below to assign directly

            /*
            String date = dateFormat.format(c1.getTime());
            */

            /* DateFormat datefmt= DateFormat.getDateInstance(DateFormat.MEDIUM);  // to get date format in Feb 31,3017
                button.setText(datefmt.format(c1.getTime()));
                string = button.getText().toString();*/

        }
    }, mYear, mMonth, mDay);
    datePickerDialog.show();
    long now = System.currentTimeMillis() - 1000;
    datePickerDialog.getDatePicker().setMinDate(now);// To Disable previous dates and enables from present date in datepicker
    datePickerDialog.getDatePicker().setMaxDate(now+31536000000L);// for 365 days  1000*60*60*24*365  mill_sec*sec*min*hours*days
}
祝你一切顺利