android中带有取消选项的日期选择器

android中带有取消选项的日期选择器,android,android-datepicker,Android,Android Datepicker,是否可以使用具有取消/设置选项的日期/时间选择器来代替单个设置命令。我的用例是,当我单击日期选择器时,该字段不是必需的,我可能希望清除所选的值。我的代码如下所示: private DatePickerDialog datePicker = null; datePicker = new DatePickerDialog(getContext(), new DateSetListener(), year, monthOfYear, dayOfMonth); 我将使用一个简单的对话框,其中包括一个

是否可以使用具有取消/设置选项的日期/时间选择器来代替单个设置命令。我的用例是,当我单击日期选择器时,该字段不是必需的,我可能希望清除所选的值。我的代码如下所示:

private DatePickerDialog datePicker = null;

datePicker = new DatePickerDialog(getContext(), new DateSetListener(), year, monthOfYear, dayOfMonth);

我将使用一个简单的对话框,其中包括一个DateTimePicker和设置和取消按钮,或者任何其他你想要包含的功能


您可以实现的另一个UI/X解决方案是按需显示DateTimePicker(例如用户单击按钮)

DatePickerDialog和TimePickerDialog存在问题(问题34833)。我们可以用一个计数器来解决这个问题。

我知道解决这个问题太晚了(我不想让任何人在这个问题上浪费时间),因为这个可能看起来像这样。。(感谢)


未尝试过,但这应该是可能的。您需要扩展“取消”按钮,并使用此功能实现您自己的“取消”按钮功能。Android上的标准是按“系统后退”按钮取消对话框-侦听器将不会被触发。@ataulm即使我这样做了,所选日期也不会被清除。@Loko有什么问题吗
DateSetListener()
?在我拥有的SDK中,它使用了
DatePickerDialog.OnDateSetListener()
,如下示例所示:DateSetListener()是一个实现DatePickerDialog.OnDateSetListener()的provate类
import android.app.DatePickerDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.widget.DatePicker;

import java.lang.reflect.Field;

/**
 * Created by root on 12/8/15.
 */
public class DatePickerDialogFragment extends DatePickerDialog {

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

public DatePickerDialogFragment(Context context,int theme,OnDateSetListener callBack,int year, int monthOfYear, int dayOfMonth)
{
    super(context, theme, null, year, monthOfYear, dayOfMonth);
    initializePicker(callBack);
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setCancelable(false);
}

@Override
public void onBackPressed() {
    super.onBackPressed();
    dismiss();

}

private void initializePicker(final OnDateSetListener callback) {
    try {
        //If you're only using Honeycomb+ then you can just call getDatePicker() instead of using reflection
        Field pickerField = DatePickerDialog.class.getDeclaredField("mDatePicker");
        pickerField.setAccessible(true);
        final DatePicker picker = (DatePicker) pickerField.get(this);
        this.setButton(DialogInterface.BUTTON_NEGATIVE, getContext().getText(android.R.string.cancel), (OnClickListener) null);
        this.setButton(DialogInterface.BUTTON_POSITIVE, getContext().getText(android.R.string.ok),
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        picker.clearFocus(); //Focus must be cleared so the value change listener is called
                        callback.onDateSet(picker, picker.getYear(), picker.getMonth(), picker.getDayOfMonth());
                    }
                });
    } catch (Exception e) { /* Reflection probably failed*/ }
}
}