Android - DatePicker 如何保持设置的当前日期

Android - DatePicker how to keep set current date

我使用 https://github.com/afollestad/material-dialogs 中的库自定义了 DatePicker 我使用那个库是因为我需要更改颜色等。

我的代码现在看起来像这样:

public class EditProfileActivity extends ActionBarActivity {
        private TextView birthdate;
        private int mYear, mMonth, mDay;
        private DatePicker datePicker;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_editprofile);
        birthdate = (Button) findViewById(R.id.birthdateTextView);
        birthdate.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
              setCustomDate();
              }
        });

        /* final Calendar c = Calendar.getInstance();
        mYear = c.get(Calendar.YEAR);
        mMonth = c.get(Calendar.MONTH);
        mDay = c.get(Calendar.DAY_OF_MONTH); */

        }

        public void setCustomDate() {

                new MaterialDialog.Builder(this)
                        .title(R.string.pilih_tanggal)
                        .customView(R.layout.datepicker_layout, true)
                        .positiveText(R.string.ok_caps)
                        .callback(new MaterialDialog.ButtonCallback() {
                            @Override
                            public void onPositive(final MaterialDialog dialog) {
                                super.onPositive(dialog);
                                datePicker = (DatePicker) dialog.findViewById(R.id.datePicker1);
                                datePicker.init(datePicker.getYear(), datePicker.getMonth(), datePicker.getDayOfMonth(), new DatePicker.OnDateChangedListener() {
                                @Override
                                public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {

                                }
                                });
                         birthdate.setText(new StringBuilder()
                         .append(datePicker.getDayOfMonth())
                         .append("").append(datePicker.getMonth())
                         .append("-").append(datePicker.getYear()));
                        }
                        })
                        .positiveColorRes(R.color.ColorPrimary)
                        .negativeText(R.string.cancel)
                        .negativeColorRes(R.color.ColorPrimary)
                        .show();
        }

所以,我成功地将 TextView 作为我从 DatePicker 设置的当前日期,但问题是当我再次点击 TextView 时,日期回到上次日期(默认)。

以上是我要挑的日期。 以下是我成功将文本设为选定日期的时间。

但遗憾的是,当我再次点击 TextView 时,日期恢复为默认日期,而不是我选择的日期。

有人可以给我一个解决问题的方向吗?到目前为止我所知道的是使用

OnDateSetListener

但是如何使用库来做到这一点呢?

我猜你必须创建另一个单独的日期选择器来设置 day/month/year 从你的文本视图中获取文本?如果这没有帮助,请告诉我,我可以删除此答案。

所以,几天前我找到了这样的解决方案:

public void setCustomDate() {
        MaterialDialog dialog = new MaterialDialog.Builder(this)
                .title(R.string.pilih_tanggal)
                .customView(R.layout.datepicker_layout, true)
                .positiveText(R.string.ok_caps)
                .callback(new MaterialDialog.ButtonCallback() {
                    @Override
                    public void onPositive(final MaterialDialog dialog) {
                        super.onPositive(dialog);
                        birthdate.setText(new StringBuilder()
                                .append(datePicker.getDayOfMonth()).append("/").append(datePicker.getMonth() + 1).append("/").append(datePicker.getYear()));
                    }
                })
                .positiveColorRes(R.color.ColorPrimary)
                .negativeText(R.string.cancel)
                .negativeColorRes(R.color.ColorPrimary)
                .show();

        datePicker = (DatePicker) dialog.findViewById(R.id.datePicker1);
        datePicker.init(mYear, mMonth, mDay, new DatePicker.OnDateChangedListener() {
            @Override
            public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                mYear = year;
                mMonth = monthOfYear;
                mDay = dayOfMonth;
            }
        });
 }

我需要在 .callback 之外初始化日期选择器,所以当 activity 运行 时,日期选择器将首先被识别。 :)

DatePickerDialog datePicker = new DatePickerDialog(getContext(),
            R.style.DatePicker, datePickerListener,
            cal.get(Calendar.YEAR),
            cal.get(Calendar.MONTH),
            cal.get(Calendar.DAY_OF_MONTH));

 datePicker.updateDate(1988,9,8);