【问题标题】:handling back button by calendar按日历处理后退按钮
【发布时间】:2017-04-05 07:15:16
【问题描述】:

我为此苦苦挣扎了几天;如果用户在弹出日历时单击后退按钮。如果用户点击后退按钮,则该字段始终填充当前日期。该类是 een 适配器,没有片段或活动。

什么是正确的解决方案?

这里是代码。

                holder.valueLabel.setOnClickListener(view -> {
                    if (item.value.equals(""))
                        try {
                            String date = new SimpleDateFormat("dd-MM-yyyy").format(new Date());
                            holder.valueLabel.setText(date);

                            DatePickerDialog datePickerDialog = showDatePickerDialog(holder.valueLabel.getText().toString(), new DatePickerDialog.OnDateSetListener() {

                                @Override
                                public void onDateSet(DatePicker view, int year, int month, int day) {
                                    String dateInFormat = getDateInFormat(year, month, day);
                                    holder.valueLabel.setText(dateInFormat);
                                    mItems.get(position).value = dateInFormat;
                                }
                            });
                            datePickerDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Annuleren", (DialogInterface.OnClickListener) (dialog, which) -> {

                                if (which == DialogInterface.BUTTON_NEGATIVE) {
                                    String dateCancel = "";
                                    holder.valueLabel.setText("");
                                    mItems.get(position).value = dateCancel;

                                } else {
                                }
                            });
                            datePickerDialog.show();
                        } catch (ParseException e) {
                            e.printStackTrace();
                        }
                    else {
                        try {

                            DatePickerDialog datePickerDialog = showDatePickerDialog(holder.valueLabel.getText().toString(), new DatePickerDialog.OnDateSetListener() {
                                @Override
                                public void onDateSet(DatePicker view, int year, int month, int day) {
                                    String dateInFormat = getDateInFormat(year, month, day);
                                    holder.valueLabel.setText(dateInFormat);
                                    mItems.get(position).value = dateInFormat;
                                }

                            });
                            datePickerDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Veld leegmaken", (DialogInterface.OnClickListener) (dialog, which) -> {
                                if (which == DialogInterface.BUTTON_NEGATIVE) {
                                    String dateCancel = "";
                                    holder.valueLabel.setText("");
                                    mItems.get(position).value = dateCancel;
                                } else {

                                }
                            });
                            datePickerDialog.show();
                        } catch (ParseException e) {
                            e.printStackTrace();
                        }
                    }
                });

【问题讨论】:

  • 尝试添加if (view.isShown()) like here
  • @Ircover 我在 OnDataSet 中添加了 (view.isShown()),它不起作用。当我点击返回按钮时,日期就被填写了。

标签: java android calendar back-button


【解决方案1】:

如果您想在按下时关闭对话框,请执行以下操作:

  • 全局声明 DatePickerDialog
  • 现在 onBackPressed(),检查对话框是否显示为:

    @Override
    public void onBackPressed() {
       if(dialog != null || dialog.isVisible()){
          dialog.dismiss();
          dialog = null;
       }
    }
    

【讨论】:

  • 我是否在适配器类中设置此解决方案?我不明白。
  • 建议你实现valueLabel的clickListener接口,在Activity/Fragment中实现datePickerDialog。然后就可以在Activity/Fragment中使用上面建议的代码了。
  • 我用 mDialog.setCancelable(false);感谢您的解决方案!
猜你喜欢
  • 2013-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-28
  • 2011-10-26
  • 2013-01-10
  • 2011-04-02
相关资源
最近更新 更多