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

时间:2017-07-20 10:18:55

标签: android datepicker

我在Android开发中使用Big Nerd Ranch指南(第2版)。到目前为止,这本书进展顺利,只是因为我发现他们的代码中存在错误而且我不知道如何修复它。我的onActivityResult类中的CrimeFragment方法检索用户选择的日期并使用该日期更新mCrime,并更新按钮上的文本以显示最新日期。这只能在onActivityResult方法中进行,但本书希望您将该行mDateButton.setText(mCrime.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()的新方法中,并在必要时调用它。它不起作用。对这个问题非常沮丧。对于如此受欢迎的书来说,这似乎是一个非常幼稚的错误。

感谢。

1 个答案:

答案 0 :(得分:1)

尝试从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
}

一切顺利,