2

我必须使用DatePickerDialog来获取textview中的选定日期。当我点击textview时,应该出现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)); 
    } 
}; 

回答

0

但它不工作难道我摆乌龙。所以很少用谷歌搜索,我把它改成这个, 它的工作,但我不明白为什么它是这样的?难道我一塌糊涂 东西在上面的代码中

你真的不惹任何东西,你只是忘了打电话给.show()对话框上;即:

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

为什么它不工作在.show()的第二代码片段的原因是因为那里的Activity管理对话框,因此将采取调用一个获取onCreateDialog(int id)返回的对话,讨论方法的照顾。

一般来说,我会推荐第二种方法,因为您并不是真的想自己管理对话框的生命周期 - 仅仅因为在配置更改等重新创建活动时很难让它正确无误。但是,对于更现代的解决方案,使用片段,您应该考虑将对话框封装在DialogFragment(支持库中还有一个可用于蜂窝前设备的版本)。

+1

OMG ...这样一个愚蠢的错误。谢谢@MH。 – Ashish0294