2016-09-23 81 views
0

月份和年份微調對話框創作爲DatePickerDialog.OnDateSetListener在Lollipop版本中失敗,任何解決方案?

private DatePickerDialog createDialogWithoutDateField() { 
     Calendar calendar = Calendar.getInstance(); 
     int year = calendar.get(Calendar.YEAR); 
     int monthOfYear = calendar.get(Calendar.MONTH); 
     int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH); 
     DatePickerDialog dpd = new DatePickerDialog(this, DatePickerDialog.THEME_HOLO_LIGHT, monthSetListener, year, monthOfYear, dayOfMonth); 

     LinearLayout pickerParentLayout = (LinearLayout) dpd.getDatePicker().getChildAt(0); 
     LinearLayout pickerSpinnersHolder = (LinearLayout) pickerParentLayout.getChildAt(0); // first child 
     NumberPicker picker = (NumberPicker) pickerSpinnersHolder.getChildAt(0); 
     picker.setVisibility(View.GONE); 


     return dpd; 
    } 

監聽聲明爲

private DatePickerDialog.OnDateSetListener monthSetListener = new DatePickerDialog.OnDateSetListener() { 

     @Override 
     public void onDateSet(DatePicker view, int selectedYear, int selectedMonth, int selectedDay) { 
      Log.d("result", " month: " + selectedMonth + " year: " + selectedYear); 
     } 
    }; 

日誌輸出沒有在每月微調或一年微調的變化工作。任何想法?

+0

你的代碼工作正常如何使用它? –

回答

0

按照Android codeOnDateSetListener的方法:

void onDateSet(DatePicker view, int year, int month, int dayOfMonth); 

僅被調用時,被點擊的DatePickerDialog正按鈕時。

你可能做的是讓提法,每個NumberPickerDatePickerDialog(就像你得到它隱藏小時選擇器),並設置它OnValueChangeListener,做你想做的監聽器的方法中:

void onValueChange(NumberPicker picker, int oldVal, int newVal); 
0

步驟1:

在您的活動中實施以下界面 DatePickerDialog.OnDateSetListener

第2步:

然後你會得到一個override方法

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

第3步:

使用下面的方法來顯示彈出,

private void loadCalendar() { 
    final Calendar c = Calendar.getInstance(); 
    int year = c.get(Calendar.YEAR); 
    int month = c.get(Calendar.MONTH); 
    int day = c.get(Calendar.DAY_OF_MONTH); 
    DatePickerDialog df = new DatePickerDialog(OptionCalculator.this, this, year, month, day); 
    df.show(); 
} 

它會正常工作。祝你好運:)

+0

以上步驟不適用於棒棒糖版本。 – chehthan

0

這是一個在Android 5.0及更高版本中發生的錯誤,當datepicker處於新的材料樣式日曆模式時。 您可以通過在DatePicker上設置android:datePickerMode="spinner"強制日期選擇器使用5.0之前的微調模式來解決此bug。

或者你可以使用DatePickerDialog代替。即使對話框處於新材料日曆模式,對話框的偵聽器的onDateChanged方法也會被調用。

0

這裏是一個將制定出的代碼。

final Calendar mcurrentDate = Calendar.getInstance(); 
     int mYear = mcurrentDate.get(Calendar.YEAR); 
     int mMonth = mcurrentDate.get(Calendar.MONTH); 
     int mDay = mcurrentDate.get(Calendar.DAY_OF_MONTH); 

     DatePickerDialog mDatePicker = new DatePickerDialog(
       MainActivity.this, new DatePickerDialog.OnDateSetListener() { 
      public void onDateSet(DatePicker datepicker, 
            int selectedyear, int selectedmonth, 
            int selectedday) { 

       mcurrentDate.set(Calendar.YEAR, selectedyear); 
       mcurrentDate.set(Calendar.MONTH, selectedmonth); 
       mcurrentDate.set(Calendar.DAY_OF_MONTH, 
         selectedday); 
       SimpleDateFormat sdf = new SimpleDateFormat(
         "MMM dd, yyyy", 
         Locale.US); 


       edtTxtDOB.setText(sdf.format(mcurrentDate 
         .getTime())); 
      } 
     }, mYear, mMonth, mDay); 

     mDatePicker.getDatePicker().setMaxDate(System.currentTimeMillis()); 
     mDatePicker.show(); 
相關問題