2015-08-08 87 views
0

我有一个片段内的datepicker dialogframgent,当我在onDateSet()方法中记录日期时,我只获取原始日期而不是从datepicker微调器更改的日期。我一直在关注http://developer.android.com/guide/topics/ui/controls/pickers.html的示例,因为我是Android新手。任何想法我做错了什么?DialogFragment DatePickerDialog不返回更改日期

对话片段

public static class DobFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener{ 

     final Calendar calendar = Calendar.getInstance(); 
     DatePicker picker; 

     protected DialogInterface.OnClickListener btn_ok_listener = new DialogInterface.OnClickListener() { 

      public void onClick(DialogInterface dialog, int which) { 
       picker.clearFocus(); 
       onDateSet(picker, picker.getYear(), picker.getMonth(), picker.getDayOfMonth()); 
      } 
     }; 

     @Override 
     public Dialog onCreateDialog(Bundle savedInstanceState) { 
      LayoutInflater inflater = getActivity().getLayoutInflater(); 
      View spinner = inflater.inflate(R.layout.date_spinner, null); 

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

      DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(), this, year, month, day); 
      picker = datePickerDialog.getDatePicker(); 

      datePickerDialog.setCancelable(true); 
      datePickerDialog.setCanceledOnTouchOutside(true); 
      datePickerDialog.setView(spinner); 
      datePickerDialog.setButton(DialogInterface.BUTTON_POSITIVE, "Ok", btn_ok_listener); 
      datePickerDialog.onDateChanged(picker,picker.getYear(),picker.getMonth(),picker.getDayOfMonth()); 


      datePickerDialog.setTitle("Birthday"); 

      return datePickerDialog; 
     } 

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

      Log.v("dates",String.valueOf(picker.getYear()) +"-" + String.valueOf(year) +"-" + String.valueOf(calendar.getTime())); 
//   Intent intent = new Intent(); 
//   intent.putExtra("result",formattedDate); 
//   getTargetFragment().onActivityResult(getTargetRequestCode(), 1, intent); 
     } 
    } 

显示对话框方法

public void showDobDialog() { 
    FragmentManager fragManager = myContext.getFragmentManager(); 
    DialogFragment frag = new DobFragment(); 
    frag.setTargetFragment(this,1); 
    frag.show(fragManager, "dob"); 
} 

日期微调按钮布局

<?xml version="1.0" encoding="utf-8"?> 
<DatePicker 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:datePickerMode="spinner" 
    android:calendarViewShown="false"> 
</DatePicker> 

日志从OnDateSet

2015-2015-Fri Aug 07 19:35:55 PDT 2015 

我的DatePicker测试运行 - 原始日期2015年8月7日

enter image description here

+0

当我不t设置我自己的看法它正常工作,但我想要一个微调而不是一个日历。 – wmurmann

回答

0

试试这个

@覆盖公共对话框onCreateDialog(@Nullable捆绑savedInstanceState){

final AtomicBoolean buttonPressed = new AtomicBoolean(); 
    final DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(), null, yearOfBirth, monthOfYear, dayOfMonth) { 
     @Override protected void onStop() { 
      super.onStop(); 
      if (!buttonPressed.get()) { 
       callback.dialogDismissed(DobFragment.this, false); 
      } 
     } 
    }; 

    datePickerDialog.setTitle(dialogTitle); 
    OnClickListener listener = new OnClickListener() { 
     @Override public void onClick(DialogInterface dialog, int which) { 
      buttonPressed.set(true); 
      boolean okSelected = which == BUTTON_POSITIVE; 
      callback.dialogDismissed(DobFragment.this, okSelected); 
      if (okSelected) { 
       DatePicker datePicker = datePickerDialog.getDatePicker(); 
       //DatePicker does not take the value in the picker as final value entered by the user, instead it take the index of the current value 
       //The below line clear the focus on the date picker making it update all its indexes and delivering the right values when clicking Set 
       //button. 
       datePicker.clearFocus(); 
       callback.onDateSet(datePicker, datePicker.getYear(), datePicker.getMonth(), datePicker.getDayOfMonth()); 
      } 
     } 
    }; 
    datePickerDialog.setButton(BUTTON_NEGATIVE, "Cancel", listener); 
    datePickerDialog.setButton(BUTTON_POSITIVE, "Set", listener); 
    return datePickerDialog; 
} 
+0

当我没有设置datePickerDialog.setview(spinner)时,你有什么想法为什么我会得到适当的更改日期?但是,当我使用我的自定义视图? – wmurmann

+0

你可以给你更详细的自定义视图。 –

+0

它只是从上面的date_spinner.xml文件。我膨胀它,然后将其设置为与datePickerDialog.setView(微调)的视图。我这样做是因为如果我不坚持使用日历日期选择器,我希望它作为方便的微调和picker.setCalendarViewShown(false); picker.setSpinnersShown(true);没有效果。 – wmurmann