Android-无法在AlertDialog中显示DatePicker



我有一个AlertDialog,它包括一个启动DatePicker的按钮。有可能在一个对话中完成这项工作吗?如果有,我该怎么做?

我搜索了谷歌和SO上的几篇帖子,但无法找到在Alert Dialog中完成DatePicker的信息。

在没有看到代码的情况下,很难猜测哪里有错误,但您可以尝试以下代码:

   public class MainActivity extends ActionBarActivity implements DatePickerDialog.OnDateSetListener {

    Context mContext;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //Set your Alert Dialog box code
        mContext=this;
        AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
        builder.setMessage("This is Alert dialog messgae")
        .setTitle("Launch the date Picker")
        .setPositiveButton("Date Pick", new OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                //Launch a date picker from Here
                showDatePickerDialog();
            }
        })
        .setNegativeButton("cancel", new OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
            //Cancel the Dialog itself  
            }
        });
        AlertDialog dialog = builder.create();
        dialog.show();
    }

    public void showDatePickerDialog() {
        DialogFragment newFragment = new DatePickerFragment();
        newFragment.show(getFragmentManager(), "datePicker");
    }
    private static class DatePickerFragment extends DialogFragment {
        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
            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);
            // Create a new instance of DatePickerDialog and return it
            return new DatePickerDialog(getActivity(), (OnDateSetListener) getActivity(), year, month, day);
        }
    }
    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear,
            int dayOfMonth) {
        // TODO Auto-generated method stub
    }

}

正如你所看到的,我正在创建一个日期选择器使用片段点击警报对话框按钮。

您的活动需要实施

onDateSet(DatePicker视图,int year,int monthOfYear,int dayOfMonth)

否则,应用程序崩溃,出现java.lang.ClassCastException,并显示以下错误消息:

MainActivity$DatePickerFragment cannot be cast to android.app.DatePickerDialog$OnDateSetListener

AlertDialog仅用于警报消息。使用对话框,您可以设置自己的内容视图。