Android:DatePicker 和 DatePicker 对话框

Posted

技术标签:

【中文标题】Android:DatePicker 和 DatePicker 对话框【英文标题】:Android: DatePicker and DatePicker Dialog 【发布时间】:2012-08-07 09:33:18 【问题描述】:

我在选项菜单上有这段代码

Dialog dialog = new Dialog(ScheduleActivity.this);
dialog.setTitle("Add Event");
dialog.setContentView(R.layout.add_even_on);
Button datePicker = (Button) dialog.findViewById(R.id.datePicker);
final DialogFragment dateFrag = new MyDatePicker();
    datePicker.setOnClickListener(new OnClickListener() 

            public void onClick(View v) 
                dateFrag.show(getSupportFragmentManager(), "datePicker");               
            
        );
dialog.show();

当点击选项菜单上的“添加事件”时,会出现一个对话框,其中有一个显示 DatePickerDialog 的按钮,旁边是一个反映DatePickerDialog 中选择的日期,这是我从 androids Developer 那里获得的关于如何使用 DatePickerDialog 的课程。

class MyDatePicker extends DialogFragment implements DatePickerDialog.OnDateSetListener 
 int pYear;
 int pDay;
 int pMonth;

@Override
  public Dialog onCreateDialog(Bundle savedInstanceState) 
    // Use the current date as the default date in the picker
    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);

    // Create a new instance of DatePickerDialog and return it
    return new DatePickerDialog(getActivity(), this, year, month, day);
  

  public void onDateSet(DatePicker view, int year, int month, int day) 
    pYear = year;
    pDay = day;
    pMonth = month;
  

所以我的问题是,当我单击 DatePickerDialog 上的“设置”时,我如何以毫秒为单位获取值,这又会自动关闭它,并返回到我的对话框,其中包含打开 DatePickerDialog 的按钮和反映的 Textview水日期被选为 DatePickerDialog... 我不会显示我在 DatePickerDialog 中选择的那个...

这是我的意思的图片,

因此,当我单击“选择日期”按钮时,会出现一个 DatePickerDialog 框,如下图所示

当我点击设置时,我想考虑该 DatePickerDialog 中以毫秒为单位的值

【问题讨论】:

【参考方案1】:

不推荐使用旧对话框。实现片段:

将您的活动迁移到片段活动:

public class YourActivity extends FragmentActivity 

创建片段对话框:

public class TimePickerFragment extends DialogFragment 

    private OnDateSetListener listener;

    public TimePickerFragment(OnDateSetListener listener) 
        this.listener=listener;
    

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) 
        // Use the current time as the default values for the picker
        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);

        // Create a new instance of TimePickerDialog and return it
        return new DatePickerDialog(getActivity(), listener, year,month,day);
    


实现接口(包:import android.app.DatePickerDialog.OnDateSetListener):

public class YourActivity extends FragmentActivity implements OnDateSetListener

    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear,int dayOfMonth) 

    


添加showDialog功能:

public class YourActivity extends FragmentActivity implements OnDateSetListener

    showDateDialog()

        FragmentManager fm = getSupportFragmentManager();
        TimePickerFragment newFragment = new TimePickerFragment(this);
        newFragment.show(fm, "date_picker");

    

    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear,int dayOfMonth) 

    


【讨论】:

如果下次有人单击按钮以显示片段时我希望日期是用户选择的最后日期怎么办? 您使用 newInstance squema 发送参数或初始参数:developer.android.com/reference/android/app/DialogFragment.html【参考方案2】:

这里我提供一些代码希望对你有所帮助..

public class NewReminder extends Activity 
private static final int DATE_DIALOG_ID = 1;
private int year;
private int month;
private int day;
EditText editTextDate;
private String currentDate;
private Context context;

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.addnewreminder);
    initialize();
    context = getApplicationContext();
    OnClickListener listenerDate = new OnClickListener() 

        @Override
        public void onClick(View arg0) 

            final Calendar c = Calendar.getInstance();
            year = c.get(Calendar.YEAR);
            month = c.get(Calendar.MONTH);
            day = c.get(Calendar.DAY_OF_MONTH);
            showDialog(DATE_DIALOG_ID);
        
    ;
    editTextDate.setOnClickListener(listenerDate);



private void initialize() 
    // TODO Auto-generated method stub

    editTextDate = (EditText) findViewById(R.id.editTextDate);




private void updateDisplay() 
    currentDate = new StringBuilder().append(day).append(".")
            .append(month + 1).append(".").append(year).toString();

    Log.i("DATE", currentDate);


OnDateSetListener myDateSetListener = new OnDateSetListener() 

    @Override
    public void onDateSet(DatePicker datePicker, int i, int j, int k) 

        year = i;
        month = j;
        day = k;
        updateDisplay();
        editTextDate.setText(currentDate);
    
;



@Override
protected Dialog onCreateDialog(int id) 
    switch (id) 
    case DATE_DIALOG_ID:
        return new DatePickerDialog(this, myDateSetListener, year, month,
                day);
    
    return null;


【讨论】:

这是我所做的最接近的,艰难的我做了一些修改,我没有完全使用你所有的方法,但它足够接近我的...... tnx showDialog(DATE_DIALOG_ID);已弃用。改用对话框片段***.com/questions/11220820/…***.com/questions/12710092/…【参考方案3】:

在 XML 中添加一个 TextView 和一个 Button

<TextView
    android:id="@+id/searchText"
    android:layout_
    android:layout_
    android:text="TextView" />

<Button
    android:id="@+id/search"
    android:layout_
    android:layout_
    android:text="Search" />

在java文件中添加以下代码

public class DatePickerDialogExample extends Activity 

    TextView txtDate;
    private int mYear, mMonth, mDay, mHour, mMinute;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);


        txtDate = (TextView) findViewById(R.id.searchText);
        Button search = (Button) findViewById(R.id.search);
        search.setOnClickListener(new View.OnClickListener() 

        @Override
        public void onClick(View v) 
            // Process to get Current Date
            final Calendar c = Calendar.getInstance();
            mYear = c.get(Calendar.YEAR);
            mMonth = c.get(Calendar.MONTH);
            mDay = c.get(Calendar.DAY_OF_MONTH);

            // Launch Date Picker Dialog
            DatePickerDialog dpd = new DatePickerDialog(PrayTimeActivity.this,
                    new DatePickerDialog.OnDateSetListener() 

                        @Override
                        public void onDateSet(DatePicker view, int year,
                                int monthOfYear, int dayOfMonth) 
                            // Display Selected date in textbox
                            txtDate.setText(dayOfMonth + "-"
                                    + (monthOfYear + 1) + "-" + year);

                        
                    , mYear, mMonth, mDay);
                dpd.show();
            
        );


    


【讨论】:

【参考方案4】:

你可以试试这个代码..它肯定对你有帮助..毫无疑问!

    protected Dialog onCreateDialog(int id) 

    Calendar c=Calendar.getInstance();
    int Sysday=c.get(Calendar.DAY_OF_MONTH);
    int Sysmonth=c.get(Calendar.MONTH);
    int Sysyear=c.get(Calendar.YEAR);

    int Sysmin=c.get(Calendar.MINUTE);
    int Syshour=c.get(Calendar.HOUR);


    switch (id) 
    case TIME_DIALOG:

        return new TimePickerDialog(this, myTimePicker , Syshour, Sysmin, false);

    case DATE_DIALOG:
        return new DatePickerDialog(this, myDatePicker, Sysyear, Sysmonth, Sysday);
    
    return null;

【讨论】:

【参考方案5】:

这是我的辅助函数,它获取上下文和 TextView 作为参数,并在用户选择日期时在该文本视图上设置日期:

        public static void showDate(final Context context, final TextView textView) 

    if (textView != null) 
        final Calendar myCalendar = Calendar.getInstance();
        DatePickerDialog.OnDateSetListener date = new DatePickerDialog.OnDateSetListener() 
            @Override
            public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) 
                // TODO Auto-generated method stub
                myCalendar.set(Calendar.YEAR, year);
                myCalendar.set(Calendar.MONTH, monthOfYear);
                myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
                String myFormat = "MM/dd/yy"; // In which you need put here
                SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US);
                //UIHelper.showLongToastInCenter(context, sdf.format(myCalendar.getTime()));
                textView.setText(sdf.format(myCalendar.getTime()));
            

        ;
        new DatePickerDialog(context, date, myCalendar.get(Calendar.YEAR), myCalendar.get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH)).show();
     else 
        UIHelper.showLongToastInCenter(context, "Unable to show Date picker");
    

【讨论】:

【参考方案6】:

试试这段代码,它肯定可以工作:

            final Calendar c = Calendar.getInstance();
            mYear = c.get(Calendar.YEAR);
            mMonth = c.get(Calendar.MONTH);
            mDay = c.get(Calendar.DAY_OF_MONTH);

            DatePickerDialog dpd = new DatePickerDialog(getActivity(),
                    new DatePickerDialog.OnDateSetListener() 

                        @Override
                        public void onDateSet(DatePicker view, int year,
                                int monthOfYear, int dayOfMonth) 

                            birth_Date.setText(dayOfMonth + "-"
                                    + (monthOfYear + 1) + "-" + year);
                        
                    , mYear, mMonth, mDay);
            dpd.show();

【讨论】:

【参考方案7】:
Calendar c1 = Calendar.getInstance();    
int year = c1.get(Calendar.YEAR);
int month = c1.get(Calendar.MONTH);
int day = c1.get(Calendar.DAY_OF_MONTH);
DatePickerDialog.OnDateSetListener myDateListener  = new DatePickerDialog.OnDateSetListener() 

       public void onDateSet(DatePicker arg0, int arg1, int arg2, int arg3) 
                   if(arg0.isShown())

                                     //do further code here

                              
                            

                          ;
        DatePickerDialog dp = new DatePickerDialog(YourActivity.this, myDateListener, year, month, day);
        dp.show();      

【讨论】:

【参考方案8】:

在 Koltin 中像这样使用它

DatePickerDialog(this as Activity, DatePickerDialog.OnDateSetListener  p0, y, m, _ -> func.invoke(y, m + 1) , c.get(Calendar.YEAR),
        c.get(Calendar.MONTH),
        c.get(Calendar.DAY_OF_MONTH))
        .show()

在任何地方使用它

tvDateFrom.click 
        showDatePicker(c)  y, m ->
            Utils.debugger("DATE FROM ", " y + $y m $m")
            tvDateFrom.text = "$m-$y".toDate()
        
    

【讨论】:

以上是关于Android:DatePicker 和 DatePicker 对话框的主要内容,如果未能解决你的问题,请参考以下文章

android 日期控件 datePicker 如何去掉右边的日历表

Android 将 unix 时间戳设置为 DatePicker

(10) android控件-date

如何更改 Android 中 DatePicker 和 TimePicker 对话框的默认颜色?

DatePicker

jQuery 的 datepicker 日期和日期逻辑