3

我的日期对话框工作正常,但是我似乎无法让 onDateChange 让我使用 dialog.getMonth、getDate 等添加到我的 onclick 事件以保存日期。

这是我的代码;

 public void addInstallDate(View view){
        Log.e("Showing Dialog", "Dialog Date");

                DatePickerDialog dateDlg = new DatePickerDialog(this,
                        new DatePickerDialog.OnDateSetListener() {
                        public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth)
                        {
                           Time chosenDate = new Time();
                           chosenDate.set(dayOfMonth, monthOfYear, year);
                           long dtDob = chosenDate.toMillis(true);
                           CharSequence strDate = DateFormat.format("MMMM dd, yyyy", dtDob);

                        }

                        public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {

                        }


                }, 2011,0, 1);


                        dateDlg.setButton("OK", new 
                                DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog, int which) {



                                    }
                                });

                         dateDlg.setMessage("Install Date?");
                         dateDlg.show();
        }

在内部(函数下方)我尝试使用 dateDlg.getMonth() 等,但它们对我不可用

public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {

                            }
4

2 回答 2

3

getMonth() 方法是在 DatePicker 上定义的,而不是 DatePickerDialog:

http://developer.android.com/reference/android/widget/DatePicker.html

但是,正如您所展示的, DatePickerDialog#onDateChanged 方法实际上提供了被选为其参数之一的月份,这可能是您正在寻找的:

http://developer.android.com/reference/android/app/DatePickerDialog.html

如果需要,您可以通过调用访问 DatePicker 实例中设置的月份

view.getMonth()

在 onDateChanged 回调中。

于 2012-11-23T13:24:20.127 回答
0

您正在设置OnDateSetListener回调,它不起作用。该侦听器仅适用于onDateSet,而不适用于onDateChanged

要使用onDateChanged回调,您必须实现DatePicker.OnDateChangedListener接口。

然后你必须在你的对话框上调用 getDatePicker 。然后你调用init(int year, int monthOfYear, int dayOfMonth, DatePicker.OnDateChangedListener onDateChangedListener)

如果您必须支持低于 API 级别 11,则不能使用此解决方案。您必须扩展 DatePickerDialog 类才能设置回调 onDateChanged。

像这样的东西:

public class Pre11DatePickerDialog extends DatePickerDialog {

    DatePicker.OnDateChangedListener    dateChangedCallback;

    public Pre11DatePickerDialog( Context context, OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth ) {
        super( context, callBack, year, monthOfYear, dayOfMonth );
    }

    public void setOnDateChangedListener( DatePicker.OnDateChangedListener dateChangedCallback ) {
        this.dateChangedCallback = dateChangedCallback;
    }

    @Override
    public void onDateChanged( DatePicker view, int year, int month, int day ) {
        super.onDateChanged( view, year, month, day );
        if ( dateChangedCallback != null ) {
            this.dateChangedCallback.onDateChanged( view, year, month, day );
        }
    }
}

然后,当您创建对话框时,您必须像这样设置侦听器:

Pre11DatePickerDialog dialog = new Pre11DatePickerDialog( getActivity(), this, year, month, day );

dialog.setOnDateChangedListener( this );

现在您可以实现onDateChanged()

    @Override
    public void onDateChanged( DatePicker view, int year, int monthOfYear, int dayOfMonth ) {
        //Do your thing here
    }

希望这会有所帮助,干杯

于 2013-05-16T20:25:15.117 回答