【问题标题】:Date picker dialog listener日期选择器对话框侦听器
【发布时间】:2013-03-23 11:09:20
【问题描述】:

我必须使用 DatePickerDialog 来获取文本视图中的选定日期。当我单击文本视图时,DatePickerDialog 应该会出现。

这是我写的

private DatePickerDialog.OnDateSetListener dateOnDateSetListener = new DatePickerDialog.OnDateSetListener() {

    @Override
    public void onDateSet(DatePicker view, int selectedYear, int selectedMonth, int selectedDay) {
        datePick.setText(new StringBuilder().append(selectedDay).append("-").append(selectedMonth).append("-").append(selectedYear));
    }
};

datePick = (TextView) findViewById(R.id.date_pick);

    datePick.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {
            Calendar calendar = Calendar.getInstance();
            year = calendar.get(Calendar.YEAR);
            monthOfYear = calendar.get(Calendar.MONTH);
            dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
            new DatePickerDialog(getContext(), dateOnDateSetListener, year, monthOfYear, dayOfMonth);
        }
    });

但它不起作用。 所以几乎没有谷歌搜索,我把它改成了这个并且它的工作,但我不明白为什么会这样?我在上面的代码中搞砸了什么

datePick = (TextView) findViewById(R.id.date_pick);

    datePick.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {
            Calendar calendar = Calendar.getInstance();
            year = calendar.get(Calendar.YEAR);
            monthOfYear = calendar.get(Calendar.MONTH);
            dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
            showDialog(DATE_DIALOG_ID);
        }
    });

@Override
protected Dialog onCreateDialog(int id) {
    switch (id) {
    case DATE_DIALOG_ID:
       // set date picker as current date
       return new DatePickerDialog(this, dateOnDateSetListener, 
                     year, monthOfYear,dayOfMonth);
    }
    return null;
}

private DatePickerDialog.OnDateSetListener dateOnDateSetListener = new DatePickerDialog.OnDateSetListener() {

    @Override
    public void onDateSet(DatePicker view, int selectedYear, int selectedMonth, int selectedDay) {
        datePick.setText(new StringBuilder().append(selectedDay).append("-").append(selectedMonth).append("-").append(selectedYear));
    }
};

【问题讨论】:

    标签: android android-widget datepicker textview datepickerdialog


    【解决方案1】:

    但它不起作用。所以几乎没有谷歌搜索,我把它改成了这个 它的工作,但我无法理解为什么会这样?我是不是搞砸了 上面代码中的一些东西

    您并没有真正搞砸任何事情,您只是忘记在对话框中调用.show();即:

    new DatePickerDialog(getContext(), dateOnDateSetListener, year, monthOfYear, dayOfMonth).show();
    

    它在第二个代码 sn-p 中没有.show() 的原因是因为Activity 管理对话框,因此将负责在onCreateDialog(int id) 返回的对话框上调用该方法。

    通常我会推荐第二种方法,因为您真的不想自己管理对话框的生命周期 - 仅仅是因为当您的活动在配置更改等时重新创建时,要正确处理它是一件很痛苦的事情。但是,对于一个更现代的解决方案,使用片段,您应该考虑将对话框包装在 DialogFragment 中(支持库中还有一个版本适用于预 Honeycomb 设备)。

    【讨论】:

      猜你喜欢
      • 2023-03-07
      • 1970-01-01
      • 2018-09-28
      • 1970-01-01
      • 1970-01-01
      • 2014-03-23
      • 2017-12-19
      • 1970-01-01
      • 2023-03-03
      相关资源
      最近更新 更多