如何在按钮单击时显示 DatePickerDialog? [关闭]

Posted

技术标签:

【中文标题】如何在按钮单击时显示 DatePickerDialog? [关闭]【英文标题】:How to show DatePickerDialog on Button click? [closed] 【发布时间】:2017-02-16 09:21:56 【问题描述】:

我正在开发一个需要用户选择日期(dd/mm/yyyy)的应用程序。 我想在单击按钮时显示一个带有 DatePicker 的对话框。 选择日期后,它必须显示在 EditText 中。

我使用的是 android Studio 2.2,最小 sdk 的项目是 23。

请帮我完成所需的代码。

【问题讨论】:

你好,你可以试试这个链接它可以帮助你***.com/questions/14933330/… Datepicker: How to popup datepicker when click on edittext的可能重复 blog.nkdroidsolutions.com/… 【参考方案1】:

我。在你的 build.gradle 添加最新的 appcompat 库,当时是 24.2.1

dependencies   
    compile 'com.android.support:appcompat-v7:X.X.X' 
    // where X.X.X version

二。让您的活动扩展android.support.v7.app.AppCompatActivity 并实现DatePickerDialog.OnDateSetListener 接口。

public class MainActivity extends AppCompatActivity  
    implements DatePickerDialog.OnDateSetListener 

三。创建您的DatePickerDialog 设置上下文、监听器的实现以及日期选择器的起始年、月和日。

DatePickerDialog datePickerDialog = new DatePickerDialog(  
    context, MainActivity.this, startYear, starthMonth, startDay);

四。在按钮的单击事件侦听器上显示对话框

((Button) findViewById(R.id.myButton))
    .setOnClickListener(new OnClickListener() 
    @Override
    public void onClick(View v) 
        datePickerDialog.show();
    
);

【讨论】:

太棒了!!我已经完成了前两个步骤,我在第三步中需要做什么@Saulmm 只需获取日期选择器对话框的实例,因为我在 sn-p 中输入填充所需的参数,然后从按钮的侦听器中触发它。 安全异常【参考方案2】:
    final Calendar newCalendar = Calendar.getInstance();
    final DatePickerDialog  StartTime = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() 
                public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) 
                    Calendar newDate = Calendar.getInstance();
                    newDate.set(year, monthOfYear, dayOfMonth);
                    activitydate.setText(dateFormatter.format(newDate.getTime()));
                
    
            , newCalendar.get(Calendar.YEAR), newCalendar.get(Calendar.MONTH), newCalendar.get(Calendar.DAY_OF_MONTH));
    
      btn_checkin.setOnClickListener(new View.OnClickListener() 
@Override   public void onClick(View v) 
         StartTime.show():    
     );

【讨论】:

只需在顶部添加final Calendar newCalendar = Calendar.getInstance(); ...然后就完美了【参考方案3】:

它对我有用。如果要启用未来时间供选择,则必须删除最大日期。您需要执行以下操作。

 btnDate.setOnClickListener(new View.OnClickListener() 
                       @Override
                       public void onClick(View v) 
                              DialogFragment newFragment = new DatePickerFragment();
                                    newFragment.show(getSupportFragmentManager(), "datePicker");
                            
                        );

            public static class DatePickerFragment extends DialogFragment
                        implements DatePickerDialog.OnDateSetListener 

                    @Override
                    public Dialog onCreateDialog(Bundle savedInstanceState) 
                        final Calendar c = Calendar.getInstance();
                        int year = c.get(Calendar.YEAR);
                        int month = c.get(Calendar.MONTH);
                        int day = c.get(Calendar.DAY_OF_MONTH);
                        DatePickerDialog dialog = new DatePickerDialog(getActivity(), this, year, month, day);
                        dialog.getDatePicker().setMaxDate(c.getTimeInMillis());
                        return  dialog;
                    

                    public void onDateSet(DatePicker view, int year, int month, int day) 
                       btnDate.setText(ConverterDate.ConvertDate(year, month + 1, day));
                    
                

【讨论】:

看起来不错!什么是 ALLOW_PAST @Kayra 你不必使用它,它是给我的。你可以用这个【参考方案4】:

以下代码有效..

datePickerButton.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View v) 
            showDialog(0);
        
    );

@Override
@Deprecated
protected Dialog onCreateDialog(int id) 
    return new DatePickerDialog(this, datePickerListener, year, month, day);


private DatePickerDialog.OnDateSetListener datePickerListener = new DatePickerDialog.OnDateSetListener() 
    public void onDateSet(DatePicker view, int selectedYear,
                          int selectedMonth, int selectedDay) 
        day = selectedDay;
        month = selectedMonth;
        year = selectedYear;
        datePickerButton.setText(selectedDay + " / " + (selectedMonth + 1) + " / "
                + selectedYear);
    
;

【讨论】:

有效但已弃用。

以上是关于如何在按钮单击时显示 DatePickerDialog? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在按钮单击时显示 DatePickerDialog? [关闭]

如何在多次单击时显示按钮的逗号分隔值

如何在按钮单击时显示/隐藏内容? [关闭]

如何在 CRM 的子网格形式中单击按钮时显示查找窗口?

Cloudinary:如何在按钮单击时显示最高分辨率的图像?

如何通过 Javascript / jQuery 在按钮单击时显示引导警报?