Android 日期选择器:如何在单击按钮时弹出日期选择器并将值存储在变量中
Android Datepicker: How to popup datepicker when click on button and store value in variable
我正在尝试解决 here 中描述的相同问题。选择日期后,我希望用它打开浏览器。还应该注意的是,我是从片段中做这项工作的。
我正在使用第二种解决方案,但面临两个问题:
- 当我按下 ChooseDate 按钮时,DatePicker 会弹出,但在我可以选择日期之前,应用程序已经打开浏览器并显示旧日期。当我按下后退按钮时,我看到 DatePicker 并且我可以选择一个日期,如果我再次按下 ChooseDate 按钮然后浏览器打开几乎(见 2)所需的日期,然后按下返回我仍然看到 DatePicker 等等.
- DatePicker returns 偏移量为 -1 的月份。例如。我选择三月,我得到二月。它发生在模拟器和 Nexus 5 设备上。 mCalender 是公历。
我的问题:
我怎样才能让日历一直保留到我选择一个日期,然后让它消失?
有没有其他人遇到日历提供的错误月份(我重新构建了应用程序,关闭并打开 Android Studio),如果是,您对此做了什么(其他然后是明显的 +1 hack)
我正在使用 Android Studio 1.1.0,API 21.
谢谢!
代码:
mChooseDateButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
openBrowser(CHOOSE_DAY);
}
});
void openBrowser(int option) {
String date = "";
switch (option) {
...
case CHOOSE_DAY:
chooseDate();
date = mChosenDate;
break;
...
}
String url = getUrl(date);
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(browserIntent);
}
...
void chooseDate() {
int year = mCalendar.get(Calendar.YEAR);
int month = mCalendar.get(Calendar.MONTH);
int day = mCalendar.get(Calendar.DAY_OF_MONTH);
DatePickerDialog dialog = new DatePickerDialog(this.getActivity(),
new DateSetListener(), year, month, day);
dialog.show();
}
class DateSetListener implements DatePickerDialog.OnDateSetListener {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
// TODO Auto-generated method stub
int chosenMonth = monthOfYear;
int chosenDay = dayOfMonth;
Log.i("DEBUG","chosen month: " + chosenMonth);
updateChosenDate(chosenMonth,chosenDay);
}
}
你需要移动这个:
String url = getUrl(date);
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(browserIntent);
DateSetListener 调用 onDateSet 的方法,因此它不会在您实际设置日期之前触发。您当前的代码将通过 switch case 运行 并启动意图,而无需等待 openBrowser() 中的对话框。
月份的问题可能是因为日历从 0 开始,而提供的值并未抵消这一点。所以只需增加 1.
我正在尝试解决 here 中描述的相同问题。选择日期后,我希望用它打开浏览器。还应该注意的是,我是从片段中做这项工作的。
我正在使用第二种解决方案,但面临两个问题:
- 当我按下 ChooseDate 按钮时,DatePicker 会弹出,但在我可以选择日期之前,应用程序已经打开浏览器并显示旧日期。当我按下后退按钮时,我看到 DatePicker 并且我可以选择一个日期,如果我再次按下 ChooseDate 按钮然后浏览器打开几乎(见 2)所需的日期,然后按下返回我仍然看到 DatePicker 等等.
- DatePicker returns 偏移量为 -1 的月份。例如。我选择三月,我得到二月。它发生在模拟器和 Nexus 5 设备上。 mCalender 是公历。
我的问题:
我怎样才能让日历一直保留到我选择一个日期,然后让它消失?
有没有其他人遇到日历提供的错误月份(我重新构建了应用程序,关闭并打开 Android Studio),如果是,您对此做了什么(其他然后是明显的 +1 hack)
我正在使用 Android Studio 1.1.0,API 21.
谢谢!
代码:
mChooseDateButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
openBrowser(CHOOSE_DAY);
}
});
void openBrowser(int option) {
String date = "";
switch (option) {
...
case CHOOSE_DAY:
chooseDate();
date = mChosenDate;
break;
...
}
String url = getUrl(date);
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(browserIntent);
}
...
void chooseDate() {
int year = mCalendar.get(Calendar.YEAR);
int month = mCalendar.get(Calendar.MONTH);
int day = mCalendar.get(Calendar.DAY_OF_MONTH);
DatePickerDialog dialog = new DatePickerDialog(this.getActivity(),
new DateSetListener(), year, month, day);
dialog.show();
}
class DateSetListener implements DatePickerDialog.OnDateSetListener {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
// TODO Auto-generated method stub
int chosenMonth = monthOfYear;
int chosenDay = dayOfMonth;
Log.i("DEBUG","chosen month: " + chosenMonth);
updateChosenDate(chosenMonth,chosenDay);
}
}
你需要移动这个:
String url = getUrl(date);
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(browserIntent);
DateSetListener 调用 onDateSet 的方法,因此它不会在您实际设置日期之前触发。您当前的代码将通过 switch case 运行 并启动意图,而无需等待 openBrowser() 中的对话框。
月份的问题可能是因为日历从 0 开始,而提供的值并未抵消这一点。所以只需增加 1.