Android Datepicker:如何在单击按钮时弹出datepicker并将值存储在变量中

时间:2015-03-25 21:16:03

标签: android datepicker android-calendar android-datepicker

我正在尝试解决here所描述的同一问题。选择日期后,我希望用它来打开浏览器。还应该注意的是,我正在从片段中完成这项工作。

我正在使用第二种解决方案,但面临两个问题:

  1. 当我按下ChooseDate按钮时,DatePicker会弹出,但在我选择日期之前,应用程序已经打开了旧日期的浏览器。当我按下后退按钮时,我看到了DatePicker,我可以选择一个日期,如果我再次按下ChooseDate按钮,那么浏览器几乎会打开(见2)所需的日期,然后按回来我仍然会看到DatePicker等等
  2. DatePicker返回偏移量为-1的月份。例如。我选择三月,我得到二月。它发生在仿真器和Nexus 5设备上。 mCalender是一个GregorianCalendar。
  3. 我的问题:

    1. 如何在我选择日期然后让它消失之前让日历保持不变?

    2. 其他人是否遇到了日历提供的错误月份(我重建了应用程序,关闭并打开了Android Studio),如果是这样,你用它做了什么(除了明显的+1黑客)< / p>

    3. 我使用的是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);
          }
      }
      

1 个答案:

答案 0 :(得分:0)

你需要移动它:

String url = getUrl(date);

Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(browserIntent);

到DateSetListener调用onDateSet的方法,因此在实际设置日期之前不会触发它。您当前的代码将通过switch case运行并启动intent而无需等待openBrowser()中的Dialog。

月份的问题可能是因为日历从0开始,并且提供的值不会抵消这个。所以只需增加1。