【问题标题】:Android - Unable to display a DatePicker from within an AlertDialogAndroid - 无法从 AlertDialog 中显示 DatePicker
【发布时间】:2015-03-07 05:02:26
【问题描述】:

我有一个AlertDialog,其中包括一个用于启动DatePicker 的按钮。是否可以在对话框中完成此操作,如果可以,我将如何处理?

我搜索了 Google 和一些关于 SO 的帖子,但无法找到有关在 Alert Dialog 中完成 DatePicker 的信息。

【问题讨论】:

  • 我自己尝试了这个解决方案。我面临的问题是解决方案只是一个 DatePicker。这是我所指的 AlertDialog 的屏幕截图。 imgur.com/jPlmKw1 我想打开 DatePicker 点击“设置日期”按钮,然后,一旦选择,返回显示的 AlertDialog。
  • 所以设置日期按钮,你想让它打开另一个对话框吗?还是在当前对话框中显示日期选择器?
  • 理想情况下,我希望 DatePicker 在同一个对话框中打开,然后在选择日期后返回编辑对话框(这是因为单击“更新”时,日期将在父活动)。

标签: android android-alertdialog android-dialog android-datepicker


【解决方案1】:

没有看到你的代码,很难猜出哪里是错误,但你可以试试下面的代码:

   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

    }


}

如您所见,我在单击警报对话框按钮时使用片段创建日期选择器。

你的Activity需要实现

onDateSet(DatePicker view, int year, int monthOfYear,int dayOfMonth)

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2011-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多