如何通过 Intent 初始化 Android DatePicker?
How to initialise Android DatePicker by Intent?
我已经显示了一个元素列表。当我单击一个元素时,会打开详细视图并显示名称、描述等。详细视图中的日期也可以更改。
现在,当我点击时,日期设置为今天的日期,但 DatePicker 没有显示(init 方法失败)。我知道我做错了什么,必须有一个 intent/an activity 从我的 DetailView class 开始,因为它不是 MainActivity。但不幸的是,我不知道该怎么做。
这是我在 DetailView.java 中的代码:
public void onDateChange() {
initDatePicker();
dateButton = findViewById(R.id.itemDateButton);
dateButton.setText(getTodaysDate());
}
private String getTodaysDate() {
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH);
month = month + 1;
int day = cal.get(Calendar.DAY_OF_MONTH);
return makeDateString(day, month, year);
}
private void initDatePicker() {
DatePickerDialog.OnDateSetListener dataSetListener = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
month = month + 1;
String date = makeDateString(dayOfMonth, month, year);
dateButton.setText(date);
}
};
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH);
int day = cal.get(Calendar.DAY_OF_MONTH);
int style = AlertDialog.THEME_HOLO_LIGHT;
datePickerDialog = new DatePickerDialog(this, style, dataSetListener, year, month, day);
}
public void openDatePicker(View view) {
datePickerDialog.show();
}
xml:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/itemDateText"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
android:text="Date"
app:layout_constraintTop_toBottomOf="@id/itemDescriptionWrapper"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/itemDateButton"
android:text="Change date"
style="?android:spinnerStyle"
app:layout_constraintTop_toBottomOf="@id/itemDateText"
android:onClick="@{() -> controller.onDateChange()}"
/>
我还可以按意图从 DetailView 发送邮件和短信。但我只是不知道如何启动 DatePicker 意图。
有什么想法吗?我会很感激。 :)
此致,
杰斯
要显示 DatePicker,您只需在 initDatePicker()
函数中添加 DatePickerDialog
的 .show()
方法。
datePickerDialog = new DatePickerDialog(this, style, dataSetListener, year, month, day);
datePickerDialog.show();
我已经显示了一个元素列表。当我单击一个元素时,会打开详细视图并显示名称、描述等。详细视图中的日期也可以更改。
现在,当我点击时,日期设置为今天的日期,但 DatePicker 没有显示(init 方法失败)。我知道我做错了什么,必须有一个 intent/an activity 从我的 DetailView class 开始,因为它不是 MainActivity。但不幸的是,我不知道该怎么做。
这是我在 DetailView.java 中的代码:
public void onDateChange() {
initDatePicker();
dateButton = findViewById(R.id.itemDateButton);
dateButton.setText(getTodaysDate());
}
private String getTodaysDate() {
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH);
month = month + 1;
int day = cal.get(Calendar.DAY_OF_MONTH);
return makeDateString(day, month, year);
}
private void initDatePicker() {
DatePickerDialog.OnDateSetListener dataSetListener = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
month = month + 1;
String date = makeDateString(dayOfMonth, month, year);
dateButton.setText(date);
}
};
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH);
int day = cal.get(Calendar.DAY_OF_MONTH);
int style = AlertDialog.THEME_HOLO_LIGHT;
datePickerDialog = new DatePickerDialog(this, style, dataSetListener, year, month, day);
}
public void openDatePicker(View view) {
datePickerDialog.show();
}
xml:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/itemDateText"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
android:text="Date"
app:layout_constraintTop_toBottomOf="@id/itemDescriptionWrapper"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/itemDateButton"
android:text="Change date"
style="?android:spinnerStyle"
app:layout_constraintTop_toBottomOf="@id/itemDateText"
android:onClick="@{() -> controller.onDateChange()}"
/>
我还可以按意图从 DetailView 发送邮件和短信。但我只是不知道如何启动 DatePicker 意图。
有什么想法吗?我会很感激。 :)
此致, 杰斯
要显示 DatePicker,您只需在 initDatePicker()
函数中添加 DatePickerDialog
的 .show()
方法。
datePickerDialog = new DatePickerDialog(this, style, dataSetListener, year, month, day);
datePickerDialog.show();