2015-03-25 5 views
0

Я пытаюсь решить ту же описанную проблему here. После того, как дата выбрана, я хочу использовать ее для открытия браузера. Следует также отметить, что я делаю эту работу из фрагмента.Android Datepicker: как всплывать datepicker при нажатии на кнопку и хранить значение в переменной

Я использую второе решение, но я сталкиваются с двумя проблемами:

  1. При нажатии на кнопку ChooseDate DatePicker выскакивает, но прежде, чем я могу выбрать дату, когда приложение уже открывает браузер со старой датой. Когда я нажимаю кнопку «назад», я вижу DatePicker, и я могу выбрать дату, и если я снова нажму кнопку «Выбрать», браузер откроется почти (см. 2) желаемую дату, а затем нажмите «Назад», я все еще вижу DatePicker и т. Д. ,
  2. DatePicker возвращает месяц со смещением -1. НАПРИМЕР. Я выбираю Марта, и я получаю февраль. Это происходит как на эмуляторе, так и на устройстве Nexus 5. mCalender - это григорианский календарь.

Мои вопросы:

  1. Как я могу получить календарь, чтобы остаться, пока я не выбрать дату, а затем сделать его уйти?

  2. ли кто-либо столкнуться неправильный месяц, поставляемый в Календаре (я перестроил приложение, закрытый и открытый Android Studio), и если да, то что вы сделали с этим (другим тогда очевидным +1 хак)

Я использую 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); 
    } 
} 

ответ

0

Вы должны переместить это:

String url = getUrl(date); 

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

в методе DateSetListener вызывает onDateSet, так что не срабатывает, прежде чем вы на самом деле установить дату , Ваш текущий код должен был бы запускаться через корпус коммутатора и начинать намерение, не дожидаясь диалога в openBrowser().

Проблема с месяцем может быть связана с тем, что календарь начинается с 0, а поставляемое значение не компенсирует это. Поэтому просто увеличивайте на 1.

+0

Может ли кто-нибудь объяснить нижний предел? В настоящее время я просматриваю примеры того, как достичь этого, и я хотел бы знать, почему это проблема? – MOnsDaR