DatePicker 对话框和按钮 => 单击两次打开

DatePicker dialog and button => click twice to open

我在我的 onCreate 方法中创建了一个对话框,在我的正常 activity 中:

 datePicker = new DatePickerDialog(this, this, cal.get(YEAR),
                    cal.get(MONTH), cal.get(DAY_OF_MONTH));

然后我调用按钮侦听器:

Button button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                datePicker.show();
                Log.e("tag", "Passage dans le click");

            }
        });

取消时 =>

  1. 当我单击此按钮一次时,会显示日期选择器。
  2. 我在对话框中单击取消
  3. 我第二次点击按钮,日期选择器显示

确定时 =>

  1. 当我单击此按钮一次时,会显示日期选择器。
  2. 我在对话框中单击“确定”
  3. 我第二次点击按钮,日期选择器没有显示

不过,如果我写两次 Datepicker.show(),那就行得通了:

 Button button = (Button) findViewById(R.id.button);
            button.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    datePicker.show();
                     datePicker.show();
                    Log.e("tag", "Passage dans le click");

                }
            });

你可以试试下面的代码...每次创建一个对话框对象,每次都会显示。希望有用。

Button button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {

       datePicker = new DatePickerDialog(this, this, cal.get(YEAR), cal.get(MONTH), cal.get(DAY_OF_MONTH));

                datePicker.show();
                Log.e("tag", "Passage dans le click");

            }
        });

这可能是由于对 onDateSet(...) 回调进行了某种 "heavy" 处理。 尝试使用这个:

button.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {

            new Handler().postDelayed(new Runnable() {

                @Override
                public void run() {
                    datePicker.show();

                }
            }, 300);
        }
    });