首页 > 解决方案 > 如果 DatePicker 在 AlertDialog 内,则不会在 EditText 单击上显示

问题描述

按照我的Java代码:

AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getContext());
alertDialogBuilder.setView(promptView);
alertDialogBuilder.setCancelable(false)
        .setPositiveButton(R.string.add, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                final EditText etDate = promptView.findViewById(R.id.etDate);
                etDate.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        final Calendar c = Calendar.getInstance();

                        DatePickerDialog dpd = new DatePickerDialog(getContext(),
                                new DatePickerDialog.OnDateSetListener() {
                                    @Override
                                    public void onDateSet(DatePicker view, int year,
                                                          int monthOfYear, int dayOfMonth) {
                                        etDate.setText(dayOfMonth + "-"
                                                + (monthOfYear + 1) + "-" + year);

                                    }
                                }, c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DATE));
                        dpd.show();
                    }
                });
            }
        });
AlertDialog alert = alertDialogBuilder.create();
alert.show();

以下etDate

<EditText
            android:id="@+id/etDate"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Date"
            android:focusable="false"
            android:inputType="date" />

如果您单击 EditText,则绝对不会发生任何事情。请注意,EditText 在 AlertDialog 内,所有内容都在片段内。

标签: javaandroidandroid-layout

解决方案


您需要OnClick在创建对话框期间设置,而不是单击 PositiveButton 按钮。

AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getContext());
    alertDialogBuilder.setView(promptView);
    alertDialogBuilder.setCancelable(false);
    final EditText etDate = promptView.findViewById(R.id.etDate);
    etDate.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            final Calendar c = Calendar.getInstance();
            DatePickerDialog dpd = new DatePickerDialog(getContext(),
                    new DatePickerDialog.OnDateSetListener() {
                        @Override
                        public void onDateSet(DatePicker view, int year,
                                              int monthOfYear, int dayOfMonth) {
                            etDate.setText(dayOfMonth + "-"
                                    + (monthOfYear + 1) + "-" + year);

                        }
                    }, c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DATE));
            dpd.show();
        }
    });
    alertDialogBuilder.setPositiveButton(R.string.add, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                }
            });
    AlertDialog alert = alertDialogBuilder.create();
    alert.show();

推荐阅读