2015-10-01 5 views
0

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

{ 
     //Declaration for class 
     ButtonViews views; 
     dpListener dpListenerView; 
     // Declartion for member vairables 
     int day, month, x_year; 
     int hour; 
     int minute; 
     Calendar calendar; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 

      views = new ButtonViews(); 
      dpListenerView = new dpListener(); 

      //ButtonListener 
      views.button_date.setOnClickListener(this); 
      views.button_time.setOnClickListener(this); 
      // 

      // pick up the default date using Calender class 
      calendar = GregorianCalendar.getInstance(TimeZone.getTimeZone("GMT"), Locale.getDefault()); 

      day = calendar.get(Calendar.DAY_OF_MONTH); 
      month = calendar.get(Calendar.MONTH); 
      x_year = calendar.get(Calendar.YEAR); 

      hour = calendar.get(Calendar.HOUR_OF_DAY); 
      minute = calendar.get(Calendar.MINUTE); 

      setupDate(day, month, x_year); 
      setupTime(hour, minute); 
     } 

     @Override 
     public void onClick(View v) { 
      switch (v.getId()) { 
       case R.id.button_date: 
        showDatePickerDialog(); 
        break; 
       case R.id.button_time: 
         showTimePickerDialog(); 
        break; 
      } 
     } 


     private void setupTime(int hours, int minutes) { 
      views.button_time.setText(hours + ":" + minutes); 
     } 

     private void setupDate(int day, int month, int year) { 
      String strMonth = ((month+1) <=9) ? ("0" + (month+1)) : String.valueOf(month+1); 
      views.button_date.setText(String.valueOf(day) + "/" + strMonth + "/" + String.valueOf(year)); 
     } 

     private void showDatePickerDialog() { 
      DatePickerDialog datepickerdialog = new DatePickerDialog 
        (
          this, 
          dpListenerView, 
          /* new DatePickerDialog.OnDateSetListener() { 
           @Override 
           public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 
           } },*/ 
          //this, 

          x_year, 
          month, 
          day 
        ); 
      datepickerdialog.getDatePicker().setMaxDate(System.currentTimeMillis()+1000); 
      datepickerdialog.getDatePicker().setMinDate(System.currentTimeMillis()-10000); 
      datepickerdialog.show(); 
     } 


    /* private OnDateSetListener dpListener = new OnDateSetListener() { 
       @Override 
       public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 
        *//* day = dayOfMonth; 
        month = monthOfYear; 
        x_year = year;*//* 
        setupDate(dayOfMonth,monthOfYear,year); 
       } 

      };*/ 


     public void showTimePickerDialog() { 

      TimePickerDialog timePickerDialog = new TimePickerDialog(
        DateTimePickerActivity.this, 
        this, 
        hour, 
        minute, 
        true 
      ); 
      calendar.set(Calendar.HOUR, hour); 
      calendar.set(Calendar.MINUTE, minute); 

      timePickerDialog.show(); 
     } 

    // @Override 
    // public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 
    //  setupDate(dayOfMonth,monthOfYear,year); 
    // } 

     @Override 
     public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 
      setupTime(hourOfDay, minute); 
     } 


     class ButtonViews { 

      Button button_time; 
      Button button_date; 

      public ButtonViews() { 
       button_date = (Button) findViewById(R.id.button_date); 
       button_time = (Button) findViewById(R.id.button_time); 
      } 
     } 

     class dpListener implements OnDateSetListener 

     { 
      @Override 
      public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 
        /* day = dayOfMonth; 
        month = monthOfYear; 
        x_year = year;*/ 

       setupDate(dayOfMonth,monthOfYear,year); 
      } 

     } 
+0

Проверьте дату и время, которое вы передали в диалоговом окне datepicker, вам нужно передать текущую дату и время, чтобы получить обновленный диалог. – Madhu

+0

выбор даты - это день месяца в году, у вас есть это обратно. Проверьте порядок аргументов конструктора. http://developer.android.com/intl/ko/reference/android/app/DatePickerDialog.html#DatePickerDialog%28android.content.Context,%20android.app.DatePickerDialog.OnDateSetListener,%20int,%20int,%20int% 29 – Breavyn

+0

Y2K наконец? :) – ZhongYu

ответ

0

Попробуйте это:

private void showDatePickerDialog() { 
     DatePickerDialog datepickerdialog = null; 
     datepickerdialog = new DatePickerDialog 
       (
         this, 
         /* new DatePickerDialog.OnDateSetListener() { 
          @Override 
          public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 
          } },*/ 
         this, 
         year, 
         month, 
         day 
       ); 
     datepickerdialog.show(); 
    } 
+0

Спасибо. Он показывает текущую дату. но все же время показывается неправильно. пожалуйста, не могли бы вы указать мне, где моя ошибка в коде спасибо –

+0

попробуйте удалить Locale.getDefault() из Calendar calendar = Calendar.getInstance (Locale.getDefault()); – Aakash

+0

Привет друг, Он отображает то же самое время. –

1

Согласно docs for the constructor:

public DatePickerDialog (
    Context context, 
    DatePickerDialog.OnDateSetListener callBack, 
    int year, 
    int monthOfYear, 
    int dayOfMonth) 

Он должен быть year, month, day, неday, month, year, как у вас есть.

Что касается проблемы вашего времени нахождения на час, то первый вещь, на которую я смотрю, - это часовой пояс по умолчанию. Это почти всегда связано с этим, когда время заканчивается точным количеством часов.

Это будет либо потому, что вы находитесь в другом часовом поясе от вашего по умолчанию, либо у вас неправильно настроена летняя экономия.

Чтобы выяснить свой часовой пояс, взгляните на this question.

+0

друг спасибо. Пожалуйста, не могли бы вы проверить, что не так в моем временном коде. Это показывает мне на час меньше текущего времени. Спасибо –

+0

@ J.Vyas, см. Обновление, а также взгляд, который должен помочь в определении того, является ли часовым поясом проблема. – paxdiablo

Смежные вопросы