按下后退按钮取消DatePickerDialog

Bha*_*rat 5 android android-fragments

在我的视图中,我有一个按钮,按下时会弹出一个DatePickerDialog.poppedup对话框有一个"完成"按钮.当我按下该按钮时,所选日期将填充到EditText框中.

现在,当我按下后退按钮(返回键),它仍然在EditText中填充日期.如何在不从中返回任何值的情况下关闭对话框.

这是我得到的代码 -

调用片段的活动:

public class TransactionActivity extends FragmentActivity implements iRibbonMenuCallback {        
    .....
    public void selectDate(View view) { 
        // This is the method invoked by the button
        SelectDateFragment newFragment = new SelectDateFragment();
        newFragment.show(getSupportFragmentManager(), "DatePicker");
    }

    public void populateSetDate(int year, int month, int day) {
        // Puts the date in the EditText box
        mEdit = (EditText)findViewById(R.id.DateText);
        mEdit.setText(month+"/"+day+"/"+year);
    }
}
Run Code Online (Sandbox Code Playgroud)

Dialog的片段(基于Android API指南中的页面):

public class SelectDateFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        final Calendar calendar = Calendar.getInstance();
        int yy = calendar.get(Calendar.YEAR);
        int mm = calendar.get(Calendar.MONTH);
        int dd = calendar.get(Calendar.DAY_OF_MONTH);
        return new DatePickerDialog(getActivity(), this, yy, mm, dd);
    }

    public void onDateSet(DatePicker view, int yy, int mm, int dd) {
             // Calls a method on the activity which invokes this fragment
         ((TransactionActivity)getActivity()).populateSetDate(yy, mm+1, dd);    

    }
}
Run Code Online (Sandbox Code Playgroud)

似乎没有与onDataSet类似的方法来处理未设置数据的情况.

有没有办法取消/解除弹出的datepicker而没有得到它的价值?

谢谢.

Bha*_*rat 6

看起来Jelybean存在一个错误,其中"取消"按钮不起作用(因此后退按钮).这是在Jelly Bean中讨论的DatePickerDialog ---有没有办法取消?

大卫Cesarino,谁报告了上述职位的bug和解决办法,张贴了他的解决方案在这里SO.

cavega稍微修改了上面的解决方案,允许将DatePickerDialog中的日期初始化为今天的日期以外的其他日期.代码可以在这里找到.我使用他的解决方案并让它工作.