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);
我使用 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);